作为开发人员,想必我们都非常熟悉日志的重要性,但是我们却非常容易忽略和日志的相关问题。平时我们使用最多的日志框架应该就是log4j,logback,log4j2。这些日志框架都是出自一个人之手: Ceki Gülcü。这些日志框架都很好用,并且也很完善,但是太依赖日志框架的jar包,当我们想换一种日志框架时,你就不得不去修改代码。
那么这个时候slf4j就孕育而生,slf4j(Simple Logging Facade for Java),java简易日志门面。是一套包装日志框架的界面程式,以外观模式实现。可以在程序要部署的时候,来决定日志框架。slf4j的作者和log4j,logback的作者都是同一人: Ceki Gülcü。
其实slf4j只是一个门面服务,他并不是真正的日志框架,真正的日志输出还是要靠log4j和logback这些日志框架。但是他比log4j这些日志框架效率更高,比Apache Commons Logging (JCL) 简单、稳定。最主要的还是他是门面框架,减少与代码的耦合性,降低程序对jar包的依赖,需要更换日志时,我们只需要修改pom.xml和日志的配置文件即可。
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</dependency>
<!-- log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
### set log levels ###
log4j.rootLogger = INFO,DEBUG, console, infoFile, errorFile ,debugfile,mail
LocationInfo=true
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.infoFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infoFile.Threshold = INFO
log4j.appender.infoFile.File = logs/log.log
log4j.appender.infoFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.infoFile.Append=true
log4j.appender.infoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.errorFile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorFile.Threshold = ERROR
log4j.appender.errorFile.File = logs/error.log
log4j.appender.errorFile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.errorFile.Append=true
log4j.appender.errorFile.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.appender.debugfile = org.apache.log4j.DailyRollingFileAppender
log4j.appender.debugfile.Threshold = DEBUG
log4j.appender.debugfile.File = logs/debug.log
log4j.appender.debugfile.DatePattern = '.'yyyy-MM-dd'.log'
log4j.appender.debugfile.Append=true
log4j.appender.debugfile.layout = org.apache.log4j.PatternLayout
log4j.appender.debugfile.layout.ConversionPattern =[%d{yyyy-MM-dd HH:mm:ss,SSS}]-[%p]:%m %x %n
log4j.logger.com.unicom.admin.*.dao=DEBUG
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class test {
private static final Logger logger = LoggerFactory.getLogger(SimulateLoginTask.class);
public static void main(String[] args) {
String json = "世界";
logger.info("你好【{}】", json);
}
}
相对于log4j输出日志用+来拼接字符串的方式,这种方式会有性能问题,而slf4j就不会,并且slf4j就相当于他的门面,至于里面的框架是log4j,或者logback,还是log4j2就全看开发者需要,可以随意更改了。