探路 Logback 日志文件
1.Logback 强在哪
1)非常自然的实现了SLF4J,不需要像Log4j和JUL那样加一个适配层。
2)Spring Boot的默认日志框架使用的是Logback。一旦某款工具库成为了默认选项,那就说明这款工具已经超过了其他竞品。
2.怎么使用Logback
第一步,在pom.xml文件中添加Logback 的依赖:
ch.qos.logback
logback-classic
1.2.3
maven会自动导入另外两个依赖;
logback-core 是Logback 的核心,logback-classic 是SLF4J的实现。
第二步:简单的示例
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Logger 和LoggerFactory 都来自SLF4J,所以如果项目是从 Log4j + SLF4J 切换到 Logback 的话,此时的代码是零改动的。
运行 Test 类,可以在控制台看到以下信息:
12:04:20.149 [main] DEBUG com.itwanger.Test - logback
在没有配置文件的情况下,一切都是默认的,Logback 的日志信息会输出到控制台。可以通过 StatusPrinter 来打印 Logback 的内部信息:
LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
StatusPrinter.print(lc);
在 main 方法中添加以上代码后,再次运行 Test 类,可以在控制台看到以下信息:
也就是说,Logback 会在 classpath 路径下先寻找 logback-test.xml 文件,没有找到的话,寻找 logback.groovy 文件,还没有的话,寻找 logback.xml 文件,都找不到的话,就输出到控制台。
一般来说,我们会在本地环境中配置 logback-test.xml,在生产环境下配置 logback.xml。
第三步,在 resource 目录下增加 logback-test.xml 文件,内容如下:
1)配置 appender
appender 可以配置多个类,这里列出三个类
截取的部分Logback配置,其他日志级别的配置基本上与此类似,可自行调整。
Logback 的配置文件非常灵活,最基本的结构为
元素,包含 0 或多个
元素,其后跟 0 或多个
元素,其后再跟最多只能存在一个的
元素。
encoder 负责把日志信息转换成字节数组,并且把字节数组写到输出流
2)配置 root,它只支持一个属性——level,值可以为:TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF。
appender-ref 用来指定具体的 appender。
3)查看内部状态信息。
可以在代码中通过 StatusPrinter 来打印 Logback 内部状态信息,也可以通过在 configuration 上开启 debug 来打印内部状态信息。
4)自动重载配置。
之前提到 Logback 很强的一个功能就是支持自动重载配置,那想要启用这个功能也非常简单,只需要在 configuration 元素上添加 scan=true
即可。
<configuration scan="true">
...
configuration>
默认情况下,扫描的时间间隔是一分钟一次。如果想要调整时间间隔,可以通过 scanPeriod 属性进行调整,单位可以是毫秒(milliseconds)、秒(seconds)、分钟(minutes)或者小时(hours)。
下面这个示例指定的时间间隔是 30 秒:
"true" scanPeriod="30 seconds"
...
注意:如果指定了时间间隔,没有指定时间单位,默认的时间单位为毫秒。
当设置 scan=true
后,Logback 会起一个 ReconfigureOnChangeTask 的任务来监视配置文件的变化。
配置完成之后把logback.xml文件放在资源文件目录下,启动项目即可。logback会根据logback这个名称自己去匹配加载。
%d{HH:mm:ss.SSS} %relative [%thread] %-5level %logger{36} - %msg%n
运行后,可以在 配置的目录下看到两个文件:debug.log 和 errror.log。