`

Log4j和Slf4j的比较

阅读更多

一直搞不清 Log4j 和 SLF4j 的关系。今天才若有所得。

因为 Log4j 出现的较早,而 SLF4j 则只是提供了一组接口,同时SLF4j 可以有不同的实现。
在 Java 中,接口是一个很重要的概念。抽象层的,面向服务的概念。
用面向接口的方法编程,是这样的:接口 + 实现类。
只要接口统一,就可以方便的替换不同的实现类。而无需改动所有的业务层代码。

奇怪的是 SLF4j  是如何统一每一种实现类都去实现它的接口呢?

SLF4j 把主流的日志库统一起来,然后对它们各自写了对应的中间类
而这些中间类,只需要实现 SLF4j 提供的统一接口即可。
所以在 SLF4j  中,是这样的:SLF4j 接口 + 中间类 + 实现类

中间类是用来连接 接口 和 实现类的。
有一张图可以看的清楚一些:用的哪个实现类,就需要那个实现类的中间类。




正因为 SLF4j 对主流的日志库都统一支持,所以它是主流日志库的“门面”。



==========
==========


简单日记门面(simple logging Facade for java) SLF4J 实现了对各种 loging Lib 的支持,并提供一个简单统一的接口。从而使得最终用户在部署的时候,能够灵活配置自己的 loging APIs 实现。准确的说,slf4j并不是一种具体的日志系统,而是一个用户日志系统的 facade,允许用户在部署最终应用时方便的变更其日志系统。

在系统开发中,统一按照slf4j的API进行开发,在部署时,选择不同的日志系统包,即可自动转换到不同的日志系统上。比如:选择JDK自带的日志系统,则只需要将slf4j-api-1.5.10.jar和slf4j-jdk14-1.5.10.jar放置到classpath中即可,如果中途无法忍受JDK自带的日志系统了,想换成log4j的日志系统,仅需要用slf4j-log4j12-1.5.10.jar替换slf4j-jdk14-1.5.10.jar即可(当然也需要log4j的jar及配置文件)


LOG4J 获得 logger 对象:
private static Logger logger = Logger.getLogger(Test.class);


SLF4J 获得 logger 对象:
private static final Logger logger = LoggerFactory.getLogger(Test.class);




在 LOG4J 中使用的方案:
这一点都不有趣,并且降低了代码可读性。
if (logger.isDebugEnabled()) {
    logger.debug("Processing trade with id: " + id + " symbol: " + symbol);
}


使用SLF4J,你可以得到在极简洁的格式的结果,就像以下展示的一样:
logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);

在 SLF4J 不需要字符串连接而且不会导致暂时不需要的字符串消耗。
取而代之的是在一个以占位符和以参数传递实际值的模板格式下写日志信息。





总结:

1.
大部分人在程序里面会去写logger.error(exception),其实这个时候log4j会去把这个exception toString()。真正的写法应该是logger(message.exception);而slf4j就不会使得程序员犯这个错误。

2.
log4j间接的在鼓励程序员使用string相加的写法,而slf4j就不会有这个问题。

3.
你可以使用 logger.error("{} is+serviceid",serviceid);
这不仅降低了代码中字符串连接次数,而且还节省了新建的String对象。

4.
使用slf4j可以方便的使用其提供的各种集体的实现的jar。(类似commons-logger)

5.
从commons--logger和log4j merge非常方便,slf4j也提供了一个swing的tools来帮助大家完成这个merge。




如何使用 SLF4J 和 Log4J 来做日志

需要三个 jar 包:

1. SLF4J 的接口
            slf4j-api-1.6.1.jar

2. 中间类
            slf4j-log4j12-1.6.1.jar

3. 实现类
            log4j-1.2.16.jar


如果使用 Maven ,只需要引用中间类的 dependency 即可
因为中间类依赖 SLF4j API 和 Log4j 实现类,Maven 会自动导入这些依赖。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>
</dependency>



还需要 Log4j 的配置文件:

log4j.properties

1. 将日志输出到控制台
# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


2. 将日志输出到文件
# Root logger option
log4j.rootLogger=INFO, file

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender

#Redirect to Tomcat logs folder
#log4j.appender.file.File=${catalina.home}/logs/logging.log

log4j.appender.file.File=C:\\logigng.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


3. 将日志输出到 控制台 和 文件
log4j.properties
# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n





-


引用:


https://www.slf4j.org/manual.html


log4j.properties example
https://www.mkyong.com/logging/log4j-log4j-properties-examples/

-










-
  • 大小: 80.7 KB
  • 大小: 71.6 KB
分享到:
评论

相关推荐

    log4j-slf4j-impl-2.12.1-API文档-中英对照版.zip

    赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...

    log4j-slf4j-impl-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...

    log4j-slf4j-impl-2.17.1-API文档-中英对照版.zip

    赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...

    log4j + slf4j-api + slf4j-log4j12

    在给定的标题和描述中,我们看到了两个关键的日志框架——`log4j`和`SLF4J(Simple Logging Facade for Java)`,以及它们之间的桥接器`slf4j-log4j12`。这些组件是Java日志处理的常用工具,让我们详细了解一下它们...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    总结,SLF4J和Log4j的组合使用让日志管理更加灵活,开发者可以通过SLF4J的简洁API进行日志记录,同时利用Log4j的强大功能,如自定义输出格式和多种输出目的地。通过适当的配置和测试,我们可以确保日志系统按照预期...

    log4j-slf4j-impl-2.11.2.jar

    log4j-slf4j-impl-2.11.2.jar

    log4j-slf4j-impl-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...

    log4j-slf4j-impl.zip

    总结,Log4j-SLF4J-Impl结合了SLF4J的灵活性和Log4j的强大功能,为Java开发者提供了高效且可扩展的日志解决方案。了解并熟练掌握这一组件,能显著提升开发效率,同时也有助于构建更稳定、易维护的应用系统。

    log4j-2.11.2的jar包和日志门面slf4j的jar包

    总结一下,这个压缩包提供了Log4j 2和SLF4J的核心组件,允许开发者利用SLF4J的简单接口和Log4j 2的强大功能。通过SLF4J的绑定实现,可以在保持代码与日志实现解耦的同时,享受到Log4j 2的高效和灵活。在实际项目中,...

    日志 log4j-slf4j+logback1.3.0

    本文将深入探讨“日志4j(Log4j)、SLF4J(Simple Logging Facade for Java)和logback 1.3.0”这三者之间的关系以及它们在Java应用中的作用。 首先,Log4j是Apache软件基金会开发的一个流行的日志记录框架,它允许...

    Log4j2结合Slf4j配置使用

    今天,我们将讨论如何将 Log4j2 结合 Slf4j 配置使用,以便更好地记录和管理日志。 首先,我们需要下载 Log4j2 和 Slf4j 的 jar 文件。Log4j2 的下载地址是 http://logging.apache.org/log4j/2.x/download.html,...

    log4j-to-slf4j-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.12.1.jar; 赠送原API文档:log4j-to-slf4j-2.12.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.12.1.pom; 包含翻译后...

    log4j-to-slf4j-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    log4j-over-slf4j-1.7.33-API文档-中文版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

    使用Slf4j集成Log4j2构建项目日志系统的完美解决方案.docx

    删除项目中存在的Log4j1.x所必须的log4j和slf4j-log4j12等依赖可以使用以下命令: mvn dependency:tree &gt; tree.log cat tree.log | grep log4j 添加Slf4j和Log4j2的依赖可以使用以下配置: &lt;groupId&gt;org.slf4j ...

    log4j_slf4j.jar

    SLF4J(Simple Logging ...总的来说,“log4j_slf4j.jar”是一个方便的组合包,它整合了SLF4J和Log4j,使得开发者可以轻松地在项目中实现日志记录,同时保留了更换日志框架的可能性,提高了项目的可维护性和可移植性。

    hibernate3-log4j-slf4j所有包

    而Log4j和SLF4J(Simple Logging Facade for Java)是两种广泛使用的日志框架。 **Log4j** Log4j是Apache的一个开源项目,提供了一种灵活的日志系统,允许开发者控制日志信息的输出级别、输出位置以及格式。它的...

    java的log4j、slf4j的jar包

    日志记录文件,使用log4j,和slf4j。这种联合使用的方式,提供log4j的jar包、log4j-over-slf4j的jar包,slf4j-api的jar包,以及log4j.properties文件。

    log4j-to-slf4j-2.17.1-API文档-中英对照版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    log4j-over-slf4j-1.7.33-API文档-中英对照版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

Global site tag (gtag.js) - Google Analytics