对于生产环境,项目日志分离至关重要,分享我们的配置,附上logback,并说明解释。
1、设置变量配置
### Logback Configuration started ###
logger.name=holiday
logger.logLevel=INFO
logger.outside.logLevel=INFO
logger.logRoot=/data/log
### Logback Configuration finished ###
2、设置生产的 logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- error 级别日志文件 -->
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logger.logRoot}/${logger.name}-error.log</File>
<encoder>
<Pattern>[%date] [%-5level] %c{40} %line --%mdc{client} [%X{TRACE_LOG_ID}] %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logger.logRoot}/${logger.name}-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 普通日志文件,排除错误日志 -->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${logger.logRoot}/${logger.name}.log</File>
<encoder>
<Pattern>[%date] [%-5level] %c{40} %line --%mdc{client} [%X{TRACE_LOG_ID}] %msg%n</Pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${logger.logRoot}/${logger.name}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
<TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>512MB</maxFileSize>
</TimeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
</appender>
<!-- 外部jar包 日志级别设置 -->
<logger level="${logger.outside.logLevel}" name="com.ibatis" />
<logger level="${logger.outside.logLevel}" name="com.mchange" />
<logger level="${logger.outside.logLevel}" name="com.mangofactory"/>
<logger level="${logger.outside.logLevel}" name="java.sql"/>
<logger level="${logger.outside.logLevel}" name="ch.qos.logback"/>
<logger level="${logger.outside.logLevel}" name="com.alibaba"/>
<logger level="${logger.outside.logLevel}" name="org"/>
<logger level="${logger.outside.logLevel}" name="jndi"/>
<logger level="${logger.outside.logLevel}" name="org.jdbcdslog"/>
<logger level="${logger.logLevel}" name="com.system"/>
<!-- 输出到文件 -->
<logger level="${logger.logLevel}" name="com.test.project" additivity="false">
<!-- 去除错误日志 -->
<appender-ref ref="logfile"/>
<!-- 只打印错误日志 -->
<appender-ref ref="error"/>
</logger>
<root level="${logger.logLevel}">
<!-- 默认不输出 -->
</root>
</configuration>
注意:日志会输出2份:项目名.log
和 项目名-error.log
,错误日志到后者查询。
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
这段代码的意思是,只接收 ERROR 的错误。logfile
则除了 ERROR 级别 的日志。
additivity="false"
是否向上传递,意思就是说我输出完了,就不往下传递让别人输出了。logger设置指定包
com.test.project
内容,输出对2个文件中。logger和root的关系,简单来说,就是logger级别高于root,root是默认的,logger没配置的时候,就会找默认的root了。
root我们这里不输出,目的是不希望有其他类的日志被采集到。
logfile 和error的filter配置一样了,是否需要修正一下
容我看看
有差异的,你在仔细看看。