简介
slf4j(simple logging Facade for java)是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。(门面模式)
LOGBack,一个“可靠、通用、快速而又灵活的Java日志框架”。
它完全可以替代apache commons logging + log4j组合,并且在性能和架构方面有了不小的改进。
1. 调用slf4j的接口,使用log4j,java.util.logging等log框架
代码中是要调用slf4j的方法来写log,基本上没有学习曲线,因为slf4j的接口和log4j等框架的接口是非常类似的。无非就是LogFactory和Log的使用而已。
而jar包之间的调用关系如图一所示:
图一:slf4j常规用法的jar文件之间的调用关系
2. 当前使用的是apache common logging + log4j组合,想不修改代码切换到slf4j + logback
代码不需要做任何修改,只要把apache common logging和log4j的jar包拿掉,增加slf4j和logback的jar,并把log4j的配置文件转换为logback的配置文件即可。
具体的jar包之间的调用关系,如图二所示:
图二:commong logging + log4j切换为slf4j的jar文件之间的调用关系
简单总结
个人看法,slf4j确实是一个非常优秀的框架,但是我们在选择的时候也要先考虑考虑。
★ 如果是写新的极小的系统,基本上不会有切换log系统的必要性,直接使用java.util.logging的接口就可以,方便快捷,配置简单。
★ 如果是写新的大型系统的话,应该考虑使用slf4j。
★ 如果是OSGi系统的话,slf4j是必选的。
★ 如果是维护现有系统的话,根据实际情况,确实有必要的话(比如说现有系统性能方面不佳;或者说系统中存在多种log系统,想要整合等),就要替换为slf4j。反之,则不需要替换,等以后真的有需求再替换也很简单的。
下面例子是一个使用logback按照每天生成log文件到tomcat目录下、、、
生成的时候之需要从LoggerFactory里面取得logger对象进行配置
private static final Logger LOG = LoggerFactory.getLogger("interfaceLogger");
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration>
<configuration>
<contextName>loginterface</contextName>
<!--配置环境变量设置相对路径-->
<property name="LOG_HOME" value="${catalina.base}/logs/loginterface"/>
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<Encoding>UTF-8</Encoding>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</layout>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${LOG_HOME}/loginterface.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>31</MaxHistory>
</rollingPolicy>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss} -%msg%n
</Pattern>
</layout>
</appender>
<!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
<logger name="interfaceLogger">
<level value="INFO"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
优点
现如今,稍微有一点点规模的软件,都会使用日志。日志可以用来监控代码中变量变化,跟踪代码运行的轨迹,在开发环境中担当调试器作用,向控制台或文件输出信息。而apache common logging + log4j的组合,在slf4j出现之前,是业界最流行的log框架组合。但是自从slf4j+LOGBack的组合出现后,有一些著名的开源项目如,Apache的某些项目,Hibernate等都已经转向了slf4j + LOGBack的组合。
它们这样的选择,也印证了slf4j + LOGBack组合的优越性。这对组合大致有以下一些优点:
1. 支持更多的log框架
同样作为log门面,apache common logging框架主要是提供在log4j和java.util.logging之间的切换,而slf4j则可以支持更多的log框架,而且即便未来有了新的log框架,也可以通过写几个简单的类就全部切换过去
2. 更佳的性能
某些关键操作,比如判定是否记录一条日志语句的操作,其性能得到了显著的提高。这个操作在LOGBack中需要3纳秒,而在Log4J中则需要30纳秒。LOGBack创建记录器(logger)的速度也更快:13毫秒,而在Log4J中需要23毫秒。更重要的是,它获取已存在的记录器只需94纳秒,而Log4J需要2234纳秒,时间减少到了1/23。跟JUL相比的性能提高也是显著的”。
3. 支持参数化配置
避免了之前为了减少字符串拼接的性能损耗而不得不写的if(logger.isDebugEnable()),现在你可以直接写:logger.debug("current user is: {}", user)。拼装消息被推迟到了它能够确定是不是要显示这条消息的时候,但是获取参数的代价并没有幸免。
4. 其他的一些优点
支持OSGi,LOGBack的配置文件可以条件化配置等。
分享到:
相关推荐
logback+slf4j 异步日志输出到不同级别的文件-配置文件,下载即可使用。结合lombok【@slf4j】即可方便愉快的输出日志了 666
log4j-slf4j+logback1.3.0 共六个jar包
本篇文章主要介绍了Spring Boot 使用slf4j+logback记录日志配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解,slf4j日志demo项目 logback.xml配置详解
NULL 博文链接:https://xiayingjie.iteye.com/blog/828498
Logback是由log4j创始人设计的另一个开源日志组件,基于slf4j的日志规范实现的框架,性能比log4j要好。 Logback主要分为三个技术模块: logback-core:该模块为其他两个模块奠定了基础。 logback-classic:是log4j...
这是logback日志输出需要的jar包,以及最基础的logback.xml配置
SLF4J(Simple Logging Facade for Java)作为commons-logging的替代,为各种logging APIs提供了一个简单的统一接口,使得最终用户能够在部署的时候配置所希望的logging APIs的实现。
SpringBoot工程自带logback和slf4j的依赖,所以重点放在编写配置文件上,需要引入什么依赖,日志依赖冲突统统都不需要我们管了。 logback框架会默认加载classpath下命名为logback-spring.xml或logback.xml的配置文件...
slf4j+logback快速上手教程最新流行的日志处理组建
Tomcat SLF4J Logback是tomcat的替代产品,它允许所有内部日志记录全部使用我们喜欢的slf4j / logback库。 注意 从logback 1.1.7开始,不再需要在server.xml中包含${catalina.home}来进行logback访问。 我们还重新...
最新的slf4j-1.7.6+logback-1.1.1,压缩包里面全套的源码和class都有的jar
On Java 8 中用到的日志包,SLF4J+Logback。
NULL 博文链接:https://nethub2.iteye.com/blog/2380050
spring mvc 所需日志jar logback slf4j
只要里面的logback-classic-1.1.7,logback-core-1.1.7,slf4j-api-1.7.21的JAR就可以打印出日志信息,而带有source表示对应的JAR包的源代码。可以要也可以不要
Simple Logging Facade for Java (SLF4J) The Simple Logging ...Java的简单日志外观(SLF4J)作为各种日志框架(例如JavaUTIL日志记录、LogCub、Log4J)的简单外观或抽象,允许终端用户在部署时插入所需的日志框架。
源码 博文链接:https://wwwzhouhui.iteye.com/blog/391845
Logback 实例,log4,slf4,logback日志输出 demo.通过配置即可指定日志信息的存储位置。
logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。 logback-access:访问模块与Servlet容器集成提供通过Http来访问日志的功能。 ...