java日志统一集成的两种方案

Posted zhen340417593

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java日志统一集成的两种方案相关的知识,希望对你有一定的参考价值。

slf4j架构

Log4j日志集成

Logback日志集成

总结

分享的目的

一次性的解决应用中日志遇到的各种问题,包括:消除应用启动过程中与日志系统相关的无用错误提示,日志打印不出来的问题等;

Slf4j架构

  1. SLF4J,即简单日志门面(Simple Logging Facade for Java),不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志System,通俗的讲,slf4j提供了目前Java日志系统的适配器;
  2. 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>

总结

  1. 当然大家在对自己的应用进行了相应的日志方案集成之后,最好也要在web.xml中配置日志的初始化的listener;
  2. 如果大家按照上面的方案对自己应用的日志系统进行了改造,你会发现,在应用启动的过程中,再也不会出现与日志系统本身集成相关的错误,更不会出现日志打不出来的现象,整个应用中日志打印出来是非常的干净;
  3. 当然统一日志集成不仅只有log4j和logback方案,还有其它方案,其它方案详见slf4j官方网站,地址链接是:https://www.slf4j.org/
  4. 因为logback日志比log4j更新,写日志的效率更高,更友好、更稳定,建议大家有时间统一把自己的应用日志系统切换到logback,log4j日志转换到logback 日志也是非常方便的,只需要按上面的要求替换相关的maven依赖,然后用logback官方的转换工具把log4j.propertiea配置文件转换成logback.xml的配置文件,如果是log4j.xml文件,转换到logback.xml更容易,只需要替换相关的appender即可,地址:https://logback.qos.ch/translator/

以上是关于java日志统一集成的两种方案的主要内容,如果未能解决你的问题,请参考以下文章

java日志统一集成的两种方案

java日志统一集成的两种方案

dubbo接口统一异常处理的两种方式

Spring+Dubbo集成Redis的两种解决方案

同一个请求分配一个traceId的两种方式

git下载代码的两种方式以及eclipse集成git