简介
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的配置文件可以条件化配置等。
分享到:
相关推荐
本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...
logback-slf4j是Java领域中一种常用的日志记录解决方案,它通过结合slf4j(Simple Logging Facade for Java)来提供了异步日志输出的功能,能够将日志输出到不同的文件中。下面是logback-slf4j日志配置文件的详细...
SLF4J(Simple Logging Facade for Java)是一个日志门面,它为各种日志框架提供了统一的接口,如Log4j、Logback等。它的主要目的是让开发者能够在部署时自由选择所需的日志实现,而无需修改代码。SLF4J通过引入`...
Logback 是 SLF4J 推荐的日志实现,它由 log4j 的创始人设计,提供了高速、灵活且可靠的日志记录功能。 使用 SLF4J 和 Logback 进行日志记录配置的主要目的是: 1. 为 Spring 的开发提供了一个更快速更广泛的入门...
SLF4J(Simple Logging Facade for Java)和Logback是Java日志处理的两个重要组件,它们在软件开发中广泛用于记录应用程序的运行时信息。SLF4J是一个日志门面,它提供了一个统一的接口,允许开发人员在运行时插入所...
总之,通过SpringBoot、Slf4j和Logback的结合,我们可以轻松地实现日志的敏感信息脱敏,提升系统的安全性。同时,这个例子也为毕业设计提供了实用的参考,让学生了解如何在实际项目中处理敏感数据,增强对隐私保护的...
Logback是SLF4J的一个实现,由著名日志框架Log4j的创始人Ceki Gülcü所创建。Logback被认为是比Log4j更高效、功能更强大的日志处理框架。 本文将详细介绍如何使用SLF4J与Logback来输出应用程序的日志,并提供必要...
SLF4J(Simple Logging Facade for Java)是Java中的一种日志门面(Logging Facade),它为各种日志框架提供了一个简单的统一接口,如Log4j、Java Util Logging (JUL)、Logback等。这个接口允许最终用户在部署时插入...
这个示例可能包含了一个简单的Java应用程序,该程序使用SLF4J API记录日志,并使用`logback.xml`配置文件进行日志输出。通过查看和运行这个示例,你可以更好地理解SLF4J和Logback是如何协同工作的。 总的来说,SLF4...
**Spring Boot SLF4J与Logback日志实践** ...我们可以通过配置文件定制日志输出路径、级别和格式,也可以在代码中灵活地使用SLF4J的API进行日志记录。了解并掌握这些知识,对于日常的开发和问题排查非常有帮助。
SLF4J提供了一个接口,开发者可以在代码中使用这些接口进行日志记录,然后通过绑定不同的日志实现(如Logback、Log4j等),在运行时选择具体的日志系统。 **2. Logback介绍** Logback是由Ceki Gülcü创建的,他是...
- **log4j-over-slf4j.jar**:用于替换Log4J,需要注意的是,原有的`log4j.properties`配置文件将不再有效,需要转换为`logback.xml`。 - **jul-to-slf4j.jar**:用于替换JDK自带的日志系统,需要在程序启动时调用`...
Slf4j 是一个 Java 日志记录门面,它提供了一个通用的日志记录API,允许开发者使用不同的日志记录框架,例如 Logback、Log4j 等。在 Springboot 项目中,Slf4j 是默认的日志记录框架。本文将介绍如何使用 Slf4j 将...
SLF4J(Simple Logging Facade for Java)和Logback是Java日志处理中的两个重要组件,它们在软件开发中广泛用于记录应用程序的运行时信息。SLF4J是一个日志门面,它提供了一个统一的接口,允许开发人员在运行时插入...
综上所述,Slf4j与Logback的结合使用可以为Java应用程序提供强大的日志管理能力。通过合理的配置和测试,我们可以确保日志系统既满足调试需求,又不拖累应用性能。在实际开发中,理解并熟练运用这些工具是非常重要的...
今天我们将聚焦两个流行的日志框架——SLF4J(Simple Logging Facade for Java)和Logback,以及它们与Log4j和Commons-Logging的对比。 SLF4J是一个接口层的日志框架,它提供一个统一的API,允许用户在运行时插入...
这个"ssm +shiro+slf4j+logback 学习记录"的压缩包可能包含了一系列教程、示例代码和配置文件,帮助开发者学习如何在实际项目中整合这些技术,实现高效且安全的Web应用。通过学习和实践这些内容,你可以掌握现代Java...
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案 Slf4j是简单的日志外观(Facade)模式,它提供了统一的日志接口,使得用户可以选择不同的日志实现。Slf4j的出现使得日志系统的开发变得更加灵活和便捷。Log4j2...
Logback是日志框架,而SLF4J(Simple Logging Facade for Java)则是一个日志抽象层,它们共同为Java应用程序提供灵活且高效的日志记录能力。 **SLF4J介绍** SLF4J(Simple Logging Facade for Java)是一个接口层...
这样,项目中的代码可以使用SLF4J的API进行日志记录,而实际的日志输出则通过log4j框架完成。 SLF4J的使用有以下几个关键点: 1. **接口定义**:SLF4J提供了一系列的Logger接口,如LoggerFactory,用于创建日志对象...