当前位置: 首页 > 工具软件 > com4j > 使用案例 >

slf4j和log4j的区别

楚健
2023-12-01

slf4j和log4j的区别

作为开发人员,想必我们都非常熟悉日志的重要性,但是我们却非常容易忽略和日志的相关问题。平时我们使用最多的日志框架应该就是log4jlogbacklog4j2。这些日志框架都是出自一个人之手: 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和日志的配置文件即可。

maven引入依赖
<!-- slf4j -->
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
</dependency> 
<!-- log4j -->
<dependency>
	<groupId>log4j</groupId>
	<artifactId>log4j</artifactId>
	<version>${log4j.version}</version>
</dependency>
springBoot配置log4j.properties
### 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就全看开发者需要,可以随意更改了。

 类似资料: