2016-07-15 110 views
1

如果我添加的logback和SLF4J我的Spring MVC(版本4.1.0)项目加入Maven依赖关系是这样的:弹簧+的logback(SLF4J)日志记录无JCL-过SLF4J

  <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>jcl-over-slf4j</artifactId> 
       <version>1.7.21</version> 
       <scope>runtime</scope> 
      </dependency> 
      <dependency> 
       <groupId>org.slf4j</groupId> 
       <artifactId>slf4j-api</artifactId> 
       <version>1.7.21</version> 
       <scope>compile</scope> 
      </dependency> 
      <dependency> 
       <groupId>ch.qos.logback</groupId> 
       <artifactId>logback-classic</artifactId> 
       <version>1.1.7</version> 
       <scope>runtime</scope> 
      </dependency> 

和排除公地-logging依赖,然后我得到的日志文件中,除了应用程序日志,一些春季活动信息级别,如:

[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started 

如果我添加依赖不JCL-过SLF4J,同时不排除在POM共享记录.xml,那么我只能得到应用程序日志。

这是我logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

    <property name="LOG_HOME" value="logs" /> 
    <property name="APP_NAME" value="App" /> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">   
     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>    
     </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <FileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.log</FileNamePattern> 
      <MaxHistory>30</MaxHistory> 
     </rollingPolicy> 

     <encoder> 
      <charset>UTF-8</charset> 
      <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>     
     </encoder> 

     <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <MaxFileSize>10MB</MaxFileSize> 
     </triggeringPolicy> 
    </appender> 

    <root level="INFO"> 
     <appender-ref ref="STDOUT" /> 
     <appender-ref ref="FILE" /> 
    </root> 

    <logger name="org.springframework" level="INFO" appender-ref="FILE"/> 
</configuration> 

据我了解,这是因为当我不使用JCL桥,的logback不能赶上或转换JCL弹簧内的日志。请纠正我,如果我错了。

我可以配置logback.xml来获取没有JCL桥的标准弹簧日志事件吗?

回答

1

检查他们的docs,因为有很多信息与例子。 但是你的问题: 春JCL:

在Spring中强制性的日志依赖为Jakarta Commons的 记录API(JCL)。我们根据JCL进行编译,并且还可以为扩展Spring Framework的类显示JCL Log 对象。这对于所有版本的Spring使用相同日志记录的用户都很重要 库:迁移很容易,因为向后兼容性是 ,即使使用扩展Spring的应用程序也是如此。我们这样做 是为了使Spring中的某个模块明确依赖 commons-logging(JCL的规范实现),然后使所有其他模块在编译时依赖于其他模块。例如,如果您使用的是Maven,并且想知道从哪里获得对公共日志记录的依赖关系,那么它来自Spring,尤其是来自名为spring-core的 中央模块。

以及配置的logback,这里是很好的点:

一个更普遍的选择之中SLF4J用户,它使用较少的步沙 产生更少的依赖关系,是直接绑定到的logback。 删除了额外的绑定步骤,因为Logback直接实现了SLF4J ,所以您只需要依赖两个库而不是四个 (jcl-over-slf4j和logback)。如果你这样做,你可能还需要 从其他外部依赖(不是 Spring)中排除slf4j-api依赖,因为你只需要在 类路径中使用该API的一个版本。