上一篇文章讲到日志的级别,下面我们来谈谈日志文件的常用配置。
Logback最常用就是在classpath路径(即resource根目录)下定义一个logback.xml配置文件,从而对日志输出配置。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--定义变量-->
<property name="log.path" value="/data/logs/server" />
<!--控制台输出策略-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!--文件输出策略-->
<appender name="rollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}.log</file>
<!--每天一归档-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.log
</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<!--logger节点,可选节点,用来具体指明包的日志输出级别,它将会覆盖root的输出级别-->
<logger name="com.example.logback" level="debug" />
<!--root节点,必选节点,用来指定最基础的日志输出级别和应用appender,格式化日志输出,目前配置控制台和文件都输出-->
<root>
<level value="info" />
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
</configuration>
上面就是最常用最基础的日志配置,下面从根节点来解析每个节点
1. 根节点configuration,有以下属性:
- a. scan,当此属性设置为true时,配置文件如果发生改变时,将会被重新加载,默认值为true。
- b. scanPeriod,设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位来,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
- c.debug,当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。 默认值为false。
2. property定义变量name,使用时通过${name}访问value,它有一个属性file,用于指定配置文件的路径;当你变量较多时,可写入配置文件中,通过file来引入,如下
<property file="/conf/variables.properties" />
variables.properties:
log.path=/data/logs/server
log.name=logFile.log
然后就直接通过${log.path}就可以访问其值
它还有一个resource的属性,作用和file一样,但它是从classpath路径下引入配置文件
<property resource="resource.properties" />
3. appender格式化日志输出节点,有俩个属性name和class,class用来指定哪种输出策略,常用就是控制台输出策略和文件输出策略。appender有以下子节点:
a. encoder和pattern节点组合用于具体输出的日志格式;
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
格式使用“%”加“转换符”方式:
%d{HH:mm:ss.SSS}:输出时间时分秒和毫秒数
%thread:输出线程名
%-5level:这里使用到修饰符,第一个可选修饰符是左对齐 标志,符号是减号“-”;接着是可选的最小宽度 修饰符,用十进制数表示。所以输出结果为日志级别进行左对齐 且最小宽度为5
%logger{36}:输出日志的logger名,长度为36
%msg:输出应用程序提供的信息
%n:换行符
输出格式栗子:
23:11:37.337 [main] INFO o.s.b.c.e.t.TomcatEmbeddedServletContainer - Tomcat started on port(s): 8080 (http)
b. file节点用来指明日志文件的输出位置,可以是绝对路径也可以是相对路径;
c. rollingPolicy日志回滚策略,在这里我们用了TimeBasedRollingPolicy,基于时间的回滚策略,有以下常见子节点
- fileNamePattern,必要节点,可以用来设置指定时间的日志归档,例如我们上面的例子是每天将日志归档成一个log文件
- maxHistory ,可选节点,可以控制已产生日志的数量,超出数量就删除旧文件,例如如果maxHistory设置为30,那么超过30天的log文件会被自动删除,只保存最近30天的日志
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 每天一归档 -->
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 只保存最近30天的日志 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
上面的配置,内容都输出到一个文件中。但为了方便定位问题,我们想异常信息输出到错误日志中去;为了统计,需要将内容输出到不同文件中。又该如何做呢?请看下回分解>>>