日志框架的作用
善用日志框架,可以大大降低项目的维护难度。项目的各个流程都用日志来记录细节,一旦出现问题,可以直接在日志里面找原因,有利于问题重现(甚至不用重现就解决问题)。
比如前端显示了一条用户的错误信息。我们可以利用日志依次追踪:后端发送前端数据时是否有问题、后端处理数据前后是否有问题、后端从DB拿数据时是否已经发生错误。按这样的方式去找,很容易找到问题。
所以在日志的使用要多用点心,以后修bug的时候,脱发的情况也少很多。
日志框架的选择
日志抽象层 | 日志实现层 |
---|---|
JCL,SLF4j … | Log4j,Log4j2,Logback |
抽象层只定义供接口,不具体实现。如果使用抽象层则直接使用抽象层,不用抽象层也可以直接使用实现层。JCL是spring默认选择,但SLF4j的占位符的设计令我喜欢,使用SLF4j也是许多人的选择。
实现层就选择目前最受认可的LogBack
SLF4j+Logback的配置和简单使用
maven导入依赖
<!-- Log framwork start-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.5</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!-- Log framwork end-->
使用方法
slf4j在StaticLoggerBinder中静态绑定了logback、log4j等框架,所以不需要开发者自己处理。导入后直接可以使用 (SLF4j的字符串输出类似于c语言的格式化输出,{}相当于%s,把变量先用’{}'代替,在字符串结束后,用逗号分隔,按顺序给出变量。这个比直接字符串拼接美观很多,也是SLF4j受欢迎的原因之一)
Logger logger = LoggerFactory.getLogger(this.getClass());
logger.info("{} visit maoni forum",requests.getRemoteHost());
效果
2019-05-30 19:54:33.213 INFO 17560 --- [nio-8080-exec-1] com.maoni.forum.controller.HelloTest : 0:0:0:0:0:0:0:1 visit maoni forum
详解日志使用描述
日志级别
一般设置日志输出级别后,只有大于等于这个级别才会输出,比如输出级别为debug,那么trace的输出就不会显示或打印到日志文本里。如果production的输出环境为debug,那么自己在测试的时候可以先调成trace输出级别,然后使用trace输出测试内容。测完之后不用撤回代码,把日志输出级别调回到debug就行。下次如果如果还要测试同样的内容,不用再写一次测试内容的输出。接下来从高到低级别介绍。
fatal
用来表示非常严重的错误。若系统继续运行,后果很严重。logback里最高级别,不过slf4j取消了这个级别。- error
出现错误,导致部分乃至整个系统运行异常。 - warn
警告,不过系统仍可正常运行。 - info
按项目流程,用来输出有意义的信息。 - debug
用来输出开发者可能想要,但不一定有用的信息。一般生产环境的日志输出是info或debug级别 - trace
级别最低。如果生产环境为debug级别,希望在没有影响的情况下保留数据输出的代码,就可以使用trace。
logback配置
配置文件的优先级:logback.groovy > logback-test.xml > logback.xml。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yy.MM.dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.exam" level="debug" />
<logger name="org.springframework.beans.factory" level="info" />
<root level="warn">
<appender-ref ref="console"/>
</root>
</configuration>
更详细的信息可以看看这个博客
https://www.cnblogs.com/warking/p/5710303.html
或者官网信息
http://logback.qos.ch/documentation.html