1. wiki
- 日志级别 : TRACE < DEBUG < INFO < WARN < ERROR < FATAL
- 在 springb 中加载顺序 : logback.xml —> application.properties —> logback-spring.xml
2. logback-spring.xml 的配置项
共有一个父标签、两种属性、三个节点组成:
- 父标签 :
<configuration>
- 属性 :
<contextName>
,<property>
- 节点 :
<appender>
,<root>
,<logger>
1. 父标签
1. <configuration>
支持的属性 :
scan
: 当此属性设置为 tru e时,配置文件如果发生改变,将会被重新加载,默认值为 true
scanPeriod
: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当 scan 为 true 时,此属性生效。默认的时间间隔为1分钟
debug
: 当此属性设置为 true 时,将打印出 logback 内部日志信息,实时查看 logback 运行状态。默认值为 false
1 2 3
| <configuration scan="true" scanPeriod="10 seconds"> ... </configuration>
|
2. 属性
1. <contextName>
每个 logger 都关联到 logger 上下文,默认上下文名称为 “default”。但可以使用设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。
如果同时存在多个配置,按照加载顺序加载,一旦遇到该配置项不同则会报错。
1 2 3
| <configuration> <contextName>logback_demo</contextName> </configuration>
|
2. <property>
用来定义变量值的标签,通过定义的值会被插入到 logger 上下文中,可以使 “${}” 来使用变量,有以下两个属性
1 2 3 4
| <configuration> <property name="APP_Name" value="myAppName" /> <contextName>${APP_Name}</contextName> </configuration>
|
3. 节点
- logger 对单个包或类添加配置,相当于局部配置,root 相当于全局配置
- root 和 logger 是父子的关系,logger 的 appender 根据参数 additivity 决定是否要叠加 root 的 appender,logger 的级别是其自身定义的级别,与 root 的级别无关系
1. <appender>
日志的渲染器,定义格式化日志输出格式,,有以下两个属性
name
: 日志的渲染器名
class
: 使用的输出策略,常见的有 console 和 file
有 <encoder>
子节点,表示输出格式
%d
: 表示时间
%thread
: 表示线程名
%-5level
: 表示日志级别,允许以五个字符长度输出
%logger{50}
: 表示具体的日志输出者,比如类名,括号内表示长度
%msg
: 表示具体的日志消息,就是 logger.info(“xxx”) 中的 xxx
%n
: 表示换行
1. console appender
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <configuration> <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>debug</level> </filter> <encoder> <Pattern>${CONSOLE_LOG_PATTERN}</Pattern> <charset>UTF-8</charset> </encoder> </appender> </configuration>
|
2. file appender
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <configuration> <appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.path}/log_debug.log</file> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> <charset>UTF-8</charset> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${log.path}/debug/log-debug-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern> <maxFileSize>100MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>debug</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender>
|
2. <root>
当配置多个 appender 时,配置启用哪种
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<root level="DEBUG"> <appender-ref ref="CONSOLE" /> <appender-ref ref="DEBUG_FILE" /> <appender-ref ref="INFO_FILE" /> <appender-ref ref="WARN_FILE" /> <appender-ref ref="ERROR_FILE" /> </root>
|
3. <logger>
对单个包或类添加配置
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<logger name="com.pikaqiu.logbackdemo" level="debug" additivity="false"> <appender-ref ref="CONSOLE" /> </logger>
<logger name="com.pikaiqu.logbackdemo.LogbackdemoApplicationTests" level="INFO" additivity="true"> <appender-ref ref="STDOUT"/> </logger>
|
2. 绑定 spring 属性标签
必须在 application.properties 加载后才能替换,因此不能使用加载顺在在它前的 logback 配置文件名,即不能使用 logback.xml
<springProperty>
: 声明引用 application.properties 中变量
<springProfile>
: 多环境下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <configuration> <springProperty scope="context" name="LOG_LEVEL" source="logging.level" defaultValue="INFO"/> <springProperty scope="context" name="LOG_HOME" source="logging.home" defaultValue="/tmp"/> <springProfile name="dev"> <root level="${LOG_LEVEL}"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE"/> </root> </springProfile> <springProfile name="prod"> <root level="${LOG_LEVEL}"> <appender-ref ref="FILE"/> </root> </springProfile> </configuration>
|
2. 举例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false">
<property name="LOG_HOME" value="/tmp/logs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <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="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <FileNamePattern>${LOG_HOME}/demo-log.%d{yyyy-MM-dd}-%i.log</FileNamePattern> <MaxHistory>30</MaxHistory> <MaxFileSize>10MB</MaxFileSize> </rollingPolicy> <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>
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
<logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/>
<root level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE"/> </root> </configuration>
|