logback.xml的配置
在代码编写过程中,为了便于排查问题,我们通常需要打印不同级别的日志信息,一般分为info、debug、error三个类型;按日期定义日志文件名称,并且设置最大日志大小和定时删除都是常用的功能;本文介绍以上功能如何实现。
logback.xml放置位置,一般放在resources文件夹下;
logback默认加载配置文件的优先级是:logback-test.xml > logback.xml > *.yml
( 在开发和测试阶段提供logback-test.xml来达到区分生产环境与开发环境的目的)。
1. log4j的日志等级
级别 | 描述 |
---|---|
OFF | 最高级别,用于关闭日志记录 |
FATAL | 致命级,会导致应用程序提前终止的严重错误 |
ERROR | 错误级别,运行时错误或异常情况,但不影响系统的继续运行 |
WARN | 表示具有潜在的错误情况 |
INFO | 表示粗粒度级别的应用程序运行情况的信息的消息 |
DEBUG | 调试级别指定是最有用的调试应用程序细粒度信息事件 |
TRACE | 跟踪级别指定细粒度信息事件比DEBUG |
ALL | 本都有最低的等级,目的是打开所有日志记录 |
2. 注意
写log的时候大家最好统一规范,潜规则是:
在什么【时间】,【人物】在【地点】做了【事件】【……】
- 【时间】:日志记录的时间
- 【人物】:日志记录的对象,如:userId=11
- 【地点】:输入日志的方法
- 【事件】:具体做了什么,如:买了xxx
- 【……】:其他相关信息,如:rpc耗时等等
- 单个信息后面加上固定分割符:如userId=11,(逗号)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="LOG_HOME" value="." />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoder默认配置为PartternLayoutEncoder -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<appender name="info" class="ch.qos.logback.core.rolling.RollingFileAppender" >
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>DENY</onMatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/logs/oci_api.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
<MaxHistory>14</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >
<maxFileSize>1GB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %-5level - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender" >
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/logs/debug.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
<MaxHistory>14</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >
<maxFileSize>1GB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %-5level - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender" >
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/logs/error.log.%d{yyyy-MM-dd}.%i</FileNamePattern>
<MaxHistory>14</MaxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP" >
<maxFileSize>1GB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} %-5level - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<root>
<appender-ref ref="STDOUT" level="INFO"/>
<appender-ref ref="info" level="INFO"/>
<appender-ref ref="debug" level="DEBUG"/>
<appender-ref ref="error" level="ERROR"/>
</root>
<logger name="org.mybatis" level="off"/>
<logger name="org.springframework" level="off"/>
<logger name="com.glass.memento" level="off"/>
<logger name="org" level="off" />
</configuration>
参考文献
http://www.atatech.org/articles/50615
http://webinglin.github.io/2015/06/04/Logback-%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/
http://qtdebug.com/spring-web/12.%20%E4%BD%BF%E7%94%A8%20Logback%20%E8%AE%B0%E5%BD%95%E6%97%A5%E5%BF%97.html