`

log4j2 异步输出日志(转)

 
阅读更多

转自: http://www.jianshu.com/p/570b406bddcd

 

 

 

背景

随着业务服务(Server App)逐渐增加,我们的业务系统中的日志输出面临的问题越来越多,高并发下对磁盘io这块消耗的越来越大,因此,急需要一个高性能且最好能够支持异步输出日志的日志框架,而且能兼容市面上目前主流的日志组件(log4j1.x,logback等)。

组件介绍

今天给大家介绍的一款日志组件是log4j2.我们不要光单单的看名字就以为是log4j1.x的升级过来的。log4j2和log4j是一个作者,只不过log4j2是重新架构的一款日志组件,他抛弃了之前log4j的不足,以及吸取了优秀的logback的设计重新推出的一款新组件。目前log4j已经基本停止更新,我们在maven中央仓库搜索的时候也会看到如下的注意

 


 

 

log4j2的社区活跃很频繁而且更新的也很快。下面我也不过多介绍需要详细了解的点

log4j2官方开发指南。下面我直接上重点。告诉大家如何使用log4j2来秒杀一切其他日志组件。

使用

log4j2之所以能秒杀一切日志组件,是因为它支持异步输出日志,在我的一项测试中,发现打印2000w个字符到日志文件中,采用log4j2的仅仅只需要200ms做有,而log4j却需要足足的将近150s.

我可以将示例代码贴出来供大家测试。


 

下面贴上log4j2的异步性能对比测试图:

 


log4j2同步和异步性能对比


log4j2的异步对比其他log日志框架

 

log4j2异步输出配置前置环境支持:加入disruptor3.0.0.jar版本或以上版本的依赖.

log4j2目前支持两种异步输出配置:

1.全局开关。

   a)我们只需要在你的classpath下面添加个log4j2.component.properties然后在里面配置

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

这样你就可以配置个普通的log4j2配置就是全量的异步输出日志了。不过,这种方式在我的测试中发现,会有一种问题,当你的程序是main方法启动测试的时候,当程序执行完毕,会有日志没有及时刷进去的可能。

     b)

            

 static {
        System.setProperty("Log4jContextSelector",
            "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");
    }

 

     c)

   

JVM 参数:
-DLog4jContextSelector=
org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

 

 

2.异步标签。异步标签这个不需要任何其他配置,只需要一个log4j2的配置,然后在需要使用异步日志输出的时候,用AsyncLogger标签来包括起来就行。这个方案经过本人亲自尝试,而且性能很好。且灵活建议大家在线上使用这个方式。

下面贴上我的简单配置:


 
分享到:
评论

相关推荐

    Log4j2异步写日志效率测试源码

    1. 配置文件(如log4j2.xml或log4j2.json):定义了Log4j2的日志配置,包括日志级别、输出目的地、是否启用异步模式等。 2. 测试类(如Log4j2AsyncTest.java):包含了测试用例,用于对比Log4j2异步和同步日志的性能...

    Log4j2异步写日志源码

    总结来说,Log4j2异步写日志通过`AsyncAppender`实现,配置文件`log4j2.xml`是关键,它定义了日志的输出方式和异步处理。`TestController.java`中的日志调用则实际触发了异步日志记录过程。这种机制在高并发环境下...

    使用log4j2实现日志数据脱敏

    使用Log4j2的Layout组件定义日志输出格式。例如,我们可以使用PatternLayout,并自定义模式来指定哪些字段需要脱敏。例如,`%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n` 是一个基本的日志...

    log4j2异步多线程打印

    此外,Log4j2还支持配置多个Appenders(日志输出目的地),这样不同的线程可以根据需求将日志输出到不同的文件或位置。 **Log4j2配置** 在Log4j2中,配置文件通常使用XML、JSON或YAML格式,可以灵活定义日志级别、...

    log4j按功能保存日志

    - **Logger**: 日志记录器,是Log4j的核心组件,负责实际的日志输出。你可以为每个功能模块创建一个独立的Logger,以便区分日志来源。 - **Appender**: 输出目的地,用于定义日志信息被发送到哪里,如控制台、文件...

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

    3. 灵活性强:Log4j2提供了多种日志输出方式,使得用户可以根据需要选择不同的日志输出方式。 搭建步骤: 要使用Slf4j集成Log4j2构建项目日志系统,需要按照以下步骤进行: 1. 删除项目中存在的Log4j1.x所必须的...

    tomcat9 slf4j+log4j2 写日志.zip

    Log4j2相比Log4j 1.x有许多改进,包括性能提升、更丰富的配置选项、异步日志记录支持以及动态日志配置等。 在Tomcat 9中配置SLF4J和Log4j2,你需要以下步骤: 1. **添加依赖**:确保你的项目中包含SLF4J和Log4j2的...

    log4j日志配置以及配置文件详解

    **日志系统在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行...同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。

    Log4j2简介及与Log4j效率对比

    3. **强大的异步日志功能**:Log4j2提供了基于LMAX Disruptor库的强大异步日志处理能力,显著提高了日志记录的性能。 4. **插件式架构**:Log4j2采用了插件式的软件架构,这使得框架易于扩展而无需修改其核心代码。...

    日志版本-log4j2版本jar

    它使用XML、JSON、YAML或Properties等多种格式的配置文件,`log4j2.xml`就是其中的一种,用于定义日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、输出目的地(控制台、文件、数据库等)以及日志格式。例如,你可以...

    springboot+mybatis+log4j2

    在项目中,我们需要修改Spring Boot的默认配置,指定使用Log4j2,并在项目的配置文件中(如`log4j2.xml`或`log4j2.json`)定义日志级别、输出格式和目标位置。 在项目中,"springBootMybatis"这个压缩包文件可能...

    log4j 详解异步日志的配置和测试

    本文将深入探讨如何配置 Log4j 来实现异步日志记录,并进行测试验证。 首先,为了在项目中使用 Log4j,我们需要在 Maven 的 `pom.xml` 文件中添加对应的依赖。这里引入的是 `slf4j-log4j12`,它是一个桥接包,使 ...

    SpringBoot框架配置log4j和log4j2的配置代码

    Log4j2作为Log4j的升级版,提供更好的性能和更丰富的特性,如异步日志记录,JSON布局,以及可插拔的日志配置。 #### 配置Log4j2 1. **添加依赖**:在`pom.xml`中,添加Log4j2的依赖。 ```xml <groupId>org....

    log4j2 demo 性能测试

    《深入理解Log4j2 Demo性能测试:探索异步日志的魅力》 在软件开发过程中,日志记录是一项至关重要的任务,它可以帮助开发者追踪程序运行状态、定位问题以及进行性能优化。Log4j2作为Java领域广泛使用的日志框架,...

    log4j2所需的jar

    7. **异步日志处理**:Log4j2引入了异步日志记录,通过使用LMAX Disruptor库,能够在不阻塞主线程的情况下高效处理日志事件,进一步提高了应用性能。 8. **JMX(Java Management Extensions)**:Log4j2支持JMX,...

    logging-log4j2-log4j-2.15.0-rc2.zip

    Log4j 2是Log4j的下一代版本,它引入了大量新特性,包括异步日志记录、可插拔的日志格式化器、动态配置以及丰富的API。相较于Log4j 1.x,Log4j 2不仅在性能上有所增强,而且在用户体验和安全性上都有显著改进。 2....

    spring-boot-starter-log4j2

    2. 异步日志:Log4j2支持异步日志记录,通过`AsyncAppender`实现,提高日志处理性能。 3. 捕获异常:使用`%throwable`占位符可以将异常堆栈信息完整地输出到日志。 总之,Spring Boot Starter Log4j2使得在Spring ...

    Java与log4j2整合mongoDB需要的jar包

    相比早期的log4j,log4j2提供了更好的性能、更多的特性,例如异步日志记录、JSON支持以及可插拔的架构。 MongoDB则是一个NoSQL数据库,以文档型数据模型为主,支持快速、高效的数据存储和检索。由于其非关系型的...

    log4j2所需jar包

    开发者主要通过这些接口来与Log4j2进行交互,比如创建Appender(输出目的地),Layout(日志格式化方式),Filter(日志过滤规则)等。API jar不包含具体的实现,而是定义了各种日志事件的处理逻辑,使得用户可以...

    log4j输出日志到数据库表中

    **标题解析:** "log4j输出日志到数据库表中" 指的是使用Log4j这个流行的Java日志框架,将日志记录存储在数据库的特定表中,而不是默认的文本文件或控制台。这通常是出于日志管理、分析和长期存储的需求。 **描述...

Global site tag (gtag.js) - Google Analytics