在网上找了些资料阅读,本文结合网上资料和个人实践进行编写,本文一些内容直接取自不同的网上文章。
此处主要是slf4j+logback输出日志。按照1.1、1.1.1、1.1.2即可完成配置。
1.slf4j日志
参考:http://hanhongke123.blog.163.com/blog/static/62223494201241631644433/
参考:http://hanhongke123.blog.163.com/blog/static/62223494201241631644433/
Slf4j : 全称为Simple Logging Facade for JAVA:java简单日志门面。 是对不同日志框架提供的一个门面封装。可以在部署的时候不修改任何配置即可接入一种日志实现方案。
其实slf4j原理很简单,它只提供一个核心slf4j api(就是slf4j-api.jar包),这个包只有日志的接口,并没有实现,所以如果要使用就得再给它提供一个实现了些接口的日志包,比如:log4j,common logging,jdk log日志实现包等,但是这些日志实现又不能通过接口直接调用,实现上他们根本就和slf4j-api不一致,因此slf4j又增加了一层来转换各日志实现包的使用,当然slf4j-simple除外。
SLF4J结构
slf4j-api(接口层)
=>
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
=>
各日志实现包
slf4j-api(接口层)
=>
各日志实现包的连接层( slf4j-jdk14, slf4j-log4j)
=>
各日志实现包
注意:如果有任意两个实现slf4j 的包同时出现,那就有可能酿就悲剧,你可能会发现日志不见了、或都打到控制台了。
原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ,编译时候绑定的是哪个是不确定的。
原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ,编译时候绑定的是哪个是不确定的。
使用SLF4j 的时候为了避免冲突,一定要保障只有一种实现类jar 包在里面。
1.1.slf4j+logback
需要配置:
slf4j-api-1.6.4.jar
slf4j-jdk14-1.7.21.jar
logback-core-1.1.7.jar
logback-classic-1.1.7.jar
logback.xml
需要配置:
slf4j-api-1.6.4.jar
slf4j-jdk14-1.7.21.jar
logback-core-1.1.7.jar
logback-classic-1.1.7.jar
logback.xml
Logback : LOGBack 作为一个通用可靠、快速灵活的日志框架,将作为Log4j 的替代和SLF4J 组成新的日志系统的完整实现。官网上称具有极佳的性能,在关键路径上执行速度是log4j 的10 倍,且内存消耗更少。具体优势见:
http://logback.qos.ch/reasonsToSwitch.html
http://logback.qos.ch/reasonsToSwitch.html
1.1.1.pom.xml
注意配置了logback的话,就不要配置slf4j-log4j12。否则,日志冲突,导致部署后无法输出日志文件。貌似引入slf4j-jdk14自动就引入slf4j-api-1.6.4.jar了。
注意配置了logback的话,就不要配置slf4j-log4j12。否则,日志冲突,导致部署后无法输出日志文件。貌似引入slf4j-jdk14自动就引入slf4j-api-1.6.4.jar了。
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-jdk14</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
1.1.2.logback.xml
文件logback.xml放到src\main\resources目录下,如:src\main\resources\logback.xml
文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<configuration>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<withJansi>true</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger) - %msg%n</pattern>
</encoder>
</appender>
<withJansi>true</withJansi>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) [%thread] %cyan(%logger) - %msg%n</pattern>
</encoder>
</appender>
<appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>log/TServer.log</File>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/TServer.log.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<File>log/TServer.log</File>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %-5level [%thread] %logger - %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>log/TServer.log.%d{yyyy-MM-dd}.log</fileNamePattern>
</rollingPolicy>
</appender>
<logger name="com" level="debug">
<appender-ref ref="consoleAppender,fileAppender" />
</logger>
<appender-ref ref="consoleAppender,fileAppender" />
</logger>
<root level="trace">
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>
<appender-ref ref="consoleAppender" />
<appender-ref ref="fileAppender" />
</root>
</configuration>