logback 根据不同业务打印日志到不同的文件

本文详细介绍了Logback的日志配置方法,包括不同类型的appender设置、滚动策略、过滤级别等,适用于希望精细化管理应用程序日志输出的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
	<appender name="mainServer_Error"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- <file>/opt/fanqizha_tomcat/python/logs/antifraud_Error.log</file> -->

		<file>E:/logs/antifraud_Error.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<maxHistory>60</maxHistory>
			<fileNamePattern>logs/antifraud_Error_%d{yyyy-MM-dd}_%i.log
			</fileNamePattern>

			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<charset>UTF-8</charset>
			<immediateFlush>true</immediateFlush>
			<pattern>[%level][%d{yyyy-MM-dd}%d{HH:mm:ss:SSS}][%thread][%logger{40}]-
				%msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印ERROR日志 -->
			<level>ERROR</level>
			<onMatch>ACCEPT</onMatch>
			<onMismatch>DENY</onMismatch>
		</filter>
	</appender>

	<appender name="mainServer"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>E:/logs/antifraud.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<maxHistory>60</maxHistory>
			<fileNamePattern>logs/antifraud_%d{yyyy-MM-dd}_%i.log
			</fileNamePattern>

			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<charset>UTF-8</charset>
			<immediateFlush>true</immediateFlush>
			<pattern>[%level][%d{yyyy-MM-dd}%d{HH:mm:ss:SSS}][%thread][%logger{40}]-
				%msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> --><!-- 只打印INFO日志 -->
			<level>DEBUG</level>
			<!-- <level>INFO</level> -->
			<!-- <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> -->
		</filter>
	</appender>


	<appender name="serviceAppender"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>E:/logs/service.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<maxHistory>60</maxHistory>
			<fileNamePattern>logs/service_%d{yyyy-MM-dd}_%i.log
			</fileNamePattern>

			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<charset>UTF-8</charset>
			<immediateFlush>true</immediateFlush>
			<pattern>%msg%n</pattern>
		</encoder>
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> --><!-- 只打印INFO日志 -->
			<!-- <level>DEBUG</level> -->
			<level>DEBUG</level>
			<!-- <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> -->
			<!-- <level>INFO</level> -->
			<!-- <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> -->
		</filter>
	</appender>

	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>[%level][%d{yyyy-MM-dd}
				%d{HH:mm:ss:SSS}][%thread][%logger{40}]- %msg%n</pattern>
		</encoder>
	</appender>
	<appender name="asyncMain" class="ch.qos.logback.classic.AsyncAppender">
		<!-- 不丢失日志.默认的,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
		<discardingThreshold>0</discardingThreshold>
		<!-- 更改默认的队列的深度,该值会影响性能.默认值为256 -->
		<queueSize>512</queueSize>
		<!-- 添加附加的appender,最多只能添加一个 -->
		<appender-ref ref="mainServer" />
	</appender>

	<logger name="com.geo.antifraud.core.mapper" level="DEBUG" />

	<logger name="com.geo.antifraud.core.controller.LoggerRecordUtil"
		level="DEBUG" additivity="false">
		<appender-ref ref="serviceAppender" />
		<appender-ref ref="mainServer_Error" />
	</logger>
	<root level="INFO">
		<appender-ref ref="mainServer_Error" />
		<!-- <appender-ref ref="mainServer"/> -->
		<!-- <appender-ref ref="serviceAppender" /> -->
		<appender-ref ref="asyncMain" />
		<appender-ref ref="console" />
	</root>
</configuration>  

### Spring Boot 中使用 logback.xml 实现日志文件隔离输出的配置示例 在 Spring Boot 项目中,可以通过 `logback.xml` 配置文件实现日志文件的隔离输出。以下是一个完整的配置示例和相关说明: #### 配置示例 ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 定义日志路径 --> <property name="LOG_PATH" value="logs"/> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 公共日志文件输出 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/app.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 模块A的日志文件输出 --> <appender name="MODULE_A_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/module_a.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/module_a.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>7</maxHistory> <totalSizeCap>100MB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 模块B的日志文件输出 --> <appender name="MODULE_B_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/module_b.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/module_b.%d{yyyy-MM-dd}.%i.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> <maxHistory>7</maxHistory> <totalSizeCap>100MB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <!-- 日志隔离配置 --> <logger name="com.example.modulea" level="INFO" additivity="false"> <appender-ref ref="MODULE_A_FILE"/> </logger> <logger name="com.example.moduleb" level="INFO" additivity="false"> <appender-ref ref="MODULE_B_FILE"/> </logger> <!-- 根日志配置 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="FILE"/> </root> </configuration> ``` #### 配置说明 1. **日志路径定义** 使用 `<property>` 标签定义日志存储路径,便于统一管理[^2]。 2. **控制台输出配置** 配置了名为 `CONSOLE` 的控制台输出,用于将日志打印到终端。 3. **公共日志文件输出** 配置了名为 `FILE` 的滚动日志文件输出,按天生成日志文件,并保留最近 30 天的历史日志。 4. **模块化日志文件输出** - 配置了两个模块化的日志文件输出:`MODULE_A_FILE` 和 `MODULE_B_FILE`。 - 使用 `SizeAndTimeBasedRollingPolicy` 实现按大小和时间切分日志文件。 5. **日志隔离配置** - 为不同业务模块(如 `com.example.modulea` 和 `com.example.moduleb`)配置独立的日志输出,通过设置 `additivity="false"` 防止日志重复输出[^2]。 6. **根日志配置** 配置了根日志级别为 `INFO`,并将日志输出到控制台和公共日志文件。 #### 注意事项 - 如果删除了 `<root>` 配置,所有未指定 logger 的日志将不再输出到控制台或公共日志文件。 - 确保日志路径存在并具有写权限,否则可能会导致日志无法正常生成。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值