栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java日志框架:log4j VS logback VS log4j2

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java日志框架:log4j VS logback VS log4j2

如果您曾经不得不分析生产中的问题,我相信您知道良好的日志记录是多么重要。良好的日志记录需要三件事:

  • 日志消息需要提供所需的信息,以了解应用程序在内部执行的操作。
  • 编写日志消息必须尽可能高效,这样才能不影响应用程序的性能。
  • 您需要能够根据不同的部署环境和情况调整日志详细信息。

虽然您仍然需要自己决定应该为每个用例编写哪些日志消息,但您不需要担心需求2和需求3。各种日志框架已经解决了这些技术需求。您只需要选择其中一个,并使用它来编写日志消息。

为了让它变得更好,SLF4J提供了一个标准化的API,大多数框架都以某种方式实现了该API。这使您能够在不更改代码的情况下更改日志框架。您只需要将依赖关系更改为实现SLF4J接口的不同框架。

使用SLF4J写入日志消息

使用SLF4J编写日志消息非常简单。首先需要调用 LoggerFactory 上的 getLogger 方法来实例化一个新的Logger对象。然后可以调用记录器上的 debug、info、warning、error 或 fatal 方法之一,以编写具有相应日志级别的日志消息。在这里,您可以看到一个典型示例:

public class MyClass { 
    Logger log = LoggerFactory.getLogger(this.getClass().getName());
 
    public void myMethod() { 
        log.info("This is an info message"); 
        // ... 
    } 
}

因此,如果这些框架很容易互换,您应该选择哪一个?

这个问题的答案并不像你想象的那么简单。Java世界中广泛使用了几种可用的框架。在本文中,我想向您介绍Log4j及其两个继承者Logback和Log4j2。

Apache Log4J

ApacheLog4J是一个非常古老的日志框架,是几年来最流行的日志框架。它介绍了一些基本概念,如分层日志级别和日志记录器,这些概念仍然被现代日志框架使用。

开发团队在2015年宣布了Log4j的生命终结。虽然很多遗留项目仍在使用它,但如果您启动一个新项目,您应该更喜欢本文中讨论的其他框架之一。

您可以使用我之前展示的SLF4JAPI来使用Log4j编写日志消息。因此,在讨论Logback和Log4j2之前,让我们快速了解一下所需的依赖项和配置。

必需的依赖项

如果希望在应用程序中使用Log4j,则需要添加Log4j。jar文件到您的类路径。您可以在下面的代码段中看到所需的Maven依赖项。

 
    log4j 
    log4j 
    1.2.17 

Log4j本机不支持SLF4J。您还需要添加以下依赖项,以便能够通过标准化接口使用Log4j。

 
    org.slf4j 
    slf4j-log4j12 
    test 
配置Log4j

除了log4j。jar文件,您需要在log4j中定义 appender 和 logger 的日志级别。属性文件。追加器将日志消息写入目标,如文件或数据库。记录器和级别定义写入日志文件的日志消息的粒度。

下面的代码片段显示了使用Hibernate作为对象关系映射器的应用程序开发系统的典型Log4j配置。它将所有日志消息写入文件应用程序。记录日志并将常规日志级别设置为INFO。该配置还设置记录器组织的日志级别。冬眠要调试的SQL和类别组织。冬眠类型描述符。要跟踪的sql。这是Hibernate的两个记录器,它们将执行的SQL语句及其绑定参数值写入配置的文件appender。

log4j.appender.file=org.apache.log4j.FileAppender 
log4j.appender.file.File=app.log 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{HH:mm:ss,SSS} %-5p [%c] - %m%n 

log4j.rootLogger=info, file 
# basic log level for all messages 
log4j.logger.org.hibernate=info 

# SQL statements and parameters 
log4j.logger.org.hibernate.SQL=debug 
log4j.logger.org.hibernate.type.descriptor.sql=trace

基于此配置,您可以使用SLF4J API编写日志消息。

Logback

Logback由实现Log4j的开发人员编写,其目标是成为Log4j的继任者。它遵循与Log4j相同的概念,但被重写是为了提高性能、本机支持SLF4J以及实现其他一些改进,如高级过滤选项和自动重新加载日志配置。

该框架由3部分组成:

  • logback-core
  • logback-classic
  • logback-access

Logback-core提供日志框架的核心功能。Logback-classic为核心功能添加了更多功能,例如,对SLF4J的本机支持。LogbackAccess将其与servlet容器集成,以便您可以使用它编写HTTP访问日志。

必需的依赖项

您只需要定义对logback-classic的依赖关系。它可传递地包括对logback核心和SLF4J API的依赖关系。

 
    ch.qos.logback 
    logback-classic 
    1.2.3 
配置Logback

Logback不需要任何配置。默认情况下,它会将调试级别或更高级别的所有日志消息写入标准输出。您可以使用XML或Groovy格式的自定义配置文件来更改这一点。

Logback使用与Log4j相同的概念。因此,毫不奇怪,即使它们使用不同的文件格式,它们的配置也非常相似。下面的代码片段显示了与我在Log4j中使用的配置相同的配置。

 
     
        app.log 
         
            %d{HH:mm:ss,SSS} %-5p [%c] - %m%n 
         
     
     
     
     
         
     

添加所需的依赖项并配置Logback后,可以使用它通过SLF4J API编写日志消息。因此,如果您想从Logback提供的改进中获益,您不需要更改任何代码来用Logback替换Log4j。

ApacheLog4j2

ApacheLog4j2是这三个框架中最年轻的一个,它的目标是通过提供自己对Log4j的改进来改进这两个框架,包括Logback中包含的一些改进,并避免Log4j和Logback的问题。

因此,与Logback一样,Log4j2支持SLF4J,自动重新加载日志配置,并支持高级过滤选项。除了这些特性之外,它还允许基于lambda表达式对日志语句进行延迟计算,为低延迟系统提供异步记录器,并提供无垃圾模式以避免垃圾收集器操作造成的任何延迟。

所有这些特性使Log4j2成为这三个日志框架中最先进、最快的。

必需的依赖项

Log4j2将其API和实现打包在两个单独的jar文件中。您可以使用log4japi实现和 log4j-api.jar ,您需要提供额外的log4j内核。运行时使用jar。如果要使用SLF4JAPI,还需要 log4j-slf4j-impl.jar 文件,其中包含两个API之间的桥梁。

 
    org.apache.logging.log4j 
    log4j-api 
    2.11.1 
 
 
    org.apache.logging.log4j 
    log4j-core 
    2.11.1 
     
 
    org.apache.logging.log4j 
    log4j-slf4j-impl 
    2.11.1 
配置Log4j2

Log4j2的配置遵循与前面两个日志框架相同的原则,因此看起来非常相似。

 
     
         
             
         
     
     
         
             
         
         
             
         
         
             
         
     

Log4j、Logback和Log4j2是广泛使用的良好日志框架。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/845422.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号