项目需要,将日志按照INFO,WARN,ERROR分级,现将配置文件做记录。
将配置文件logback.log置于src/main/resourses目录下,配置如下。
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false" scan="true" scanPeriod="30 seconds"> <property name="app.name" value="kafka_webSocket_services"/> <property name="log.base" value="logs"/> <contextName>${app.name}</contextName> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{uuid} [%thread] [%-5p] [%F:%L] %m%n</pattern> </encoder> </appender> <!--info_log--> <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.base}/${app.name}_info.log</file> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{uuid} [%thread] [%-5p] [%F:%L] %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.base}/%d{yyyyMMdd}/${app.name}_info_%d{yyyyMMdd}_%i.log.zip</fileNamePattern> <maxFileSize>3GB</maxFileSize> <maxHistory>14</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--warn_log--> <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.base}/${app.name}_warn.log</file> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{uuid} [%thread] [%-5p] [%F:%L] %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.base}/%d{yyyyMMdd}/${app.name}_warn_%d{yyyyMMdd}_%i.log.zip</fileNamePattern> <maxFileSize>3GB</maxFileSize> <maxHistory>14</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>WARN</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--error_log--> <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.base}/${app.name}_error.log</file> <encoder charset="UTF-8"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{uuid} [%thread] [%-5p] [%F:%L] %m%n</pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.base}/%d{yyyyMMdd}/${app.name}_error_%d{yyyyMMdd}_%i.log.zip</fileNamePattern> <maxFileSize>3GB</maxFileSize> <maxHistory>14</maxHistory> </rollingPolicy> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <root level="INFO"> <appender-ref ref="STDOUT"/> <appender-ref ref="WARN_FILE"/> <appender-ref ref="INFO_FILE"/> <appender-ref ref="ERROR_FILE"/> </root> <!-- <logger name="com.lat.theonex.dao" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> </logger> <logger name="com.lat.theonex.mybatis.dao" level="DEBUG" additivity="false"> <appender-ref ref="STDOUT"/> </logger>--> </configuration>
首先配置多个appender标签,分别记录不同级别的日志内容。
appender相当于一个日志执行块,在配置的root节点和logger节点中加载这些appender即可实现输出配置的多种日志。
logger继承root,类似java的继承,logger中定义的级别,会覆盖root中的级别。
logger中的name="com.lat.theonex.mybatis.dao" 意为此logger管理的代码范围,类似于spring的扫包。
详细规则可参考Spring Boot干货系列:(七)默认日志框架配置
遇到问题:
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch>中的onMismatch标签只能在依赖logback,如果一代log4j或者log4j2则会报错。