java日志统一集成的两种方案
Posted zhen340417593
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java日志统一集成的两种方案相关的知识,希望对你有一定的参考价值。
slf4j架构
Log4j日志集成
Logback日志集成
总结
分享的目的
一次性的解决应用中日志遇到的各种问题,包括:消除应用启动过程中与日志系统相关的无用错误提示,日志打印不出来的问题等;
Slf4j架构
- SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System,通俗的讲,slf4j提供了目前Java日志系统的适配器;
- SLF4J所提供的核心API是一些接口以及一个LoggerFactory的工厂类,有点类似于JDBC,在使用SLF4J的时候,不需要在代码中或配置文件中指定你打算使用那个具体的日志系统(SPI)。如同使用JDBC基本不用考虑具体数据库一样,SLF4J提供了统一的记录日志的接口,只要按照其提供的方法记录即可,最终日志的格式、记录级别、输出方式等通过具体日志系统的配置来实现,因此可以在应用中灵活切换日志系统。
Log4j日志集成
公共的Maven依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.verson}</version>
</dependency>
log4j依赖
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.verson}</version>
</dependency>
排除的依赖
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<exclusion>
<exclusion>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<exclusion>
<exclusion>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
Logback日志集成
我使用的日志版本
<slf4j.version>1.8.0-beta2</slf4j.version>
<logback.version>1.3.0-alpha4</logback.version>
公共的Maven依赖
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配jcl(Jakarta Commons Logging ) -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<!-- 适配jul java.util.logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<version>${slf4j.verson}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.2</version>
</dependency>
Logback依赖
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${logback.version}</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.2</version>
</dependency>
排除的依赖
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
总结
- 当然大家在对自己的应用进行了相应的日志方案集成之后,最好也要在web.xml中配置日志的初始化的listener;
- 如果大家按照上面的方案对自己应用的日志系统进行了改造,你会发现,在应用启动的过程中,再也不会出现与日志系统本身集成相关的错误,更不会出现日志打不出来的现象,整个应用中日志打印出来是非常的干净;
- 当然统一日志集成不仅只有log4j和logback方案,还有其它方案,其它方案详见slf4j官方网站,地址链接是:https://www.slf4j.org/
- 因为logback日志比log4j更新,写日志的效率更高,更友好、更稳定,建议大家有时间统一把自己的应用日志系统切换到logback,log4j日志转换到logback 日志也是非常方便的,只需要按上面的要求替换相关的maven依赖,然后用logback官方的转换工具把log4j.propertiea配置文件转换成logback.xml的配置文件,如果是log4j.xml文件,转换到logback.xml更容易,只需要替换相关的appender即可,地址:https://logback.qos.ch/translator/
以上是关于java日志统一集成的两种方案的主要内容,如果未能解决你的问题,请参考以下文章