一、官方说明:
The Simple Logging Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks, such as java.util.logging, logback and log4j. SLF4J allows the end-user to plug in the desired logging framework at deployment time. Note that SLF4J-enabling your library/application implies the addition of only a single mandatory dependency, namely slf4j-api-1.7.25.jar.
slf4j为多种不同的日志框架提供一个简单的门面,比如jdk自带的logging、logback、log4等等。slf4j允许终端用户在部署期插入想要的日志框架。要让你的程序使用slf4j,只需要一个单独的依赖,比如slf4j-api-1.7.25.jar.
参考:https://www.slf4j.org/manual.html
二、如何使用呢,从最简单的hello world开始:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); } }
但是仅有slf4j-api-1.7.25.jar还不行,这个jar包并没有提供日志实现,所以还需要导入底层的日志框架的jar包。
下面是另一个例子;
1: import org.slf4j.Logger; 2: import org.slf4j.LoggerFactory; 3: 4: public class Wombat { 5: 6: final Logger logger = LoggerFactory.getLogger(Wombat.class); 7: Integer t; 8: Integer oldT; 9: 10: public void setTemperature(Integer temperature) { 11: 12: oldT = t; 13: t = temperature; 14: 15: logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT); 16: 17: if(temperature.intValue() > 50) { 18: logger.info("Temperature has risen above 50 degrees."); 19: } 20: } 21: }
三、slf4j支持的日志框架
上面红线主要是强调只放置一个底层日志绑定相关的jar包;不要放置多于一个的日志框架。
四、项目maven依赖
logback:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.13</version> </dependency>
log4j:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency>
jdk自带:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.7.25</version> </dependency>
五、我自己项目中使用时的日志框架配置:
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.18</slf4j.version>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
log4j.properties:
#log4j.debug=true #部署环境 #log4j.rootLogger=INFO,E,W,I,D #log4j.logger.org.apache=INFO,E,W,I,D #log4j.logger.com.newthreeboard.Demo=debug,Console,E,D #开发调试环境 log4j.rootLogger=debug,Console,E,D log4j.logger.org.apache.ibatis=debug,Console,E,D log4j.logger.org.apache.http.client=OFF log4j.logger.org.apache.http.impl.conn.Wire=OFF log4j.logger.org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor=OFF #log4j.logger.httpclient.wire.header=W #log4j.logger.httpclient.wire.content=W #log4j.logger.org.apache.http.impl=W log4j.appender.E = org.apache.log4j.DailyRollingFileAppender log4j.appender.E.DatePattern='.' yyyy-MM-dd log4j.appender.E.MaxFileSize=20MB log4j.appender.E.MaxBackupIndex=100 log4j.appender.E.File = ./logs/error.log log4j.appender.E.Append = true log4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayout log4j.appender.E.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}[%p] %l %m%n log4j.appender.W = org.apache.log4j.DailyRollingFileAppender log4j.appender.W.DatePattern='.' yyyy-MM-dd log4j.appender.W.MaxFileSize=20MB log4j.appender.W.MaxBackupIndex=100 log4j.appender.W.File = ./logs/warn.log log4j.appender.W.Append = true log4j.appender.W.Threshold = WARN log4j.appender.W.layout = org.apache.log4j.PatternLayout log4j.appender.W.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}[%p] %l %m%n log4j.appender.I = org.apache.log4j.DailyRollingFileAppender log4j.appender.I.DatePattern='.' yyyy-MM-dd log4j.appender.I.MaxFileSize=20MB log4j.appender.I.MaxBackupIndex=100 log4j.appender.I.File = ./logs/info.log log4j.appender.I.Append = true log4j.appender.I.Threshold = INFO log4j.appender.I.layout = org.apache.log4j.PatternLayout log4j.appender.I.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}[%p] %l %m%n log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.DatePattern='.' yyyy-MM-dd log4j.appender.D.MaxFileSize=10MB log4j.appender.D.MaxBackupIndex=50 log4j.appender.D.File = ./logs/debug.log log4j.appender.D.Append = true log4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss}[%p] %l %m%n log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Threshold=DEBUG log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}[%p] %l %m%n