Java日志记录Tips
使用Java来记录日志有几个需要注意的地方的
- 首先日志框架很多,不同的类库有可能会使用不同的日志框架,如何兼容是一个问题
- 配置文件的复杂性
Java体系的日志框架有:
- Logback
- Log4j
- Log4j2
- commons-logging
- JDK 自带的Java.util.logging
如果不同的包使用不同的日志框架的话,那管理就会变得非常麻烦。为了解决这个问题,就有了SLF4J – Simple Logging Facade For Java
- 提供了统一的日志门面API,实现了中立的日志记录API
- 桥接功能
- 可以将各种日志框架的API桥接到SLF4J API上。这样一来,即便你的程序试用了各种日志API记录日志,最终都可以桥接到Slf4j门面API上
- 适配功能
- 实现slf4j和实际日志框架的绑定
- slf4j知识日志标准,还是需要一个实际的日志框架
下面一起梳理下常见的日志记录中的错误
1. 理解Logback配置,避免重复记录
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] [%-5level] [%logger{40}:%line] - %msg%n</pattern>
</layout>
</appender>
<logger name="org.geekbang.time.commonmistakes.logging" level="DEBUG">
<appender-ref ref="CONSOLE"/>
</logger>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
要注意在使用appender的时候,appender是如何挂载的,上述代码将appender挂载在了两个不同的地方,而且两个都定义在了root下,所以会造成重复。
对于需要将不同的日志放到不同的文件的应用场景,可以通过设置Logger的additivity属性来实现这个操作
<logger name="org.geekbang.time.commonmistakes.logging" level="DEBUG" additivity="false">
<appender-ref ref="FILE"/>
</logger>
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 stone2paul@gmail.com
文章标题:Java日志记录Tips
文章字数:508
本文作者:Leilei Chen
发布时间:2020-09-15, 11:03:32
最后更新:2020-09-15, 11:04:02
原始链接:https://www.llchen60.com/Java%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95Tips/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。