log4j2 配置详解_Log4j2同步日志,混合日志和异步日志配置详解

Log4j 2中记录日志的方式有同步日志和异步日志两种方式,其中异步日志又可分为使用AsyncAppender和使用AsyncLogger两种方式。

同步日志

所谓同步日志,即当输出日志时,必须等待日志输出语句执行完毕后,才能执行后面的业务逻辑语句。

下面给出小编在开发中的配置

<?xml version="1.0" encoding="UTF-8"?>fileName="${LOG_HOME}/${LOG_MODULE_NAME}-infoLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-infoLog-%d{yyyy-MM-dd}-%i.log.gz">fileName="${LOG_HOME}/${LOG_MODULE_NAME}-errorLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-errorLog-%d{yyyy-MM-dd}-%i.log.gz">

混合同步和异步日志

Log4j-2.9及更高版本在类路径上需要disruptor-3.3.4.jar或更高版本。在Log4j-2.9之前,需要disruptor-3.0.0.jar或更高版本。无需将系统属性“Log4jContextSelector”设置为任何值。

可以在配置中组合同步和异步记录器。这为您提供了更大的灵活性,但代价是性能略有下降(与使所有记录器异步相比)。使用或 配置元素指定需要异步的记录器。配置只能包含一个根记录器( 或元素),但是可以组合异步和非异步记录器。例如,包含元素的配置文件也可以包含和同步记录器的元素。

默认情况下,异步记录器不会将位置传递给I / O线程。如果您的某个布局或自定义过滤器需要位置信息,则需要在所有相关记录器的配置中设置“includeLocation = true”,包括根记录器。

首先引入disruptor依赖

com.lmaxdisruptor3.4.2

混合异步记录器的配置可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>fileName="${LOG_HOME}/${LOG_MODULE_NAME}-infoLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-infoLog-%d{yyyy-MM-dd}-%i.log.gz"immediateFlush="false">fileName="${LOG_HOME}/${LOG_MODULE_NAME}-errorLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-errorLog-%d{yyyy-MM-dd}-%i.log.gz"immediateFlush="false">

异步日志(性能最好,推荐使用)

Log4j-2.9及更高版本在类路径上需要disruptor-3.3.4.jar或更高版本。在Log4j-2.9之前,需要disruptor-3.0.0.jar或更高版本。

这是最简单的配置,并提供最佳性能。要使所有记录器异步,请将disruptor jar添加到类路径,并将系统属性log4j2.contextSelector设置 为org.apache.logging.log4j.core.async.AsyncLoggerContextSelector。

默认情况下,异步记录器不会将位置传递给I / O线程。如果您的某个布局或自定义过滤器需要位置信息,则需要在所有相关记录器的配置中设置“includeLocation = true”,包括根记录器。

首先引入disruptor依赖

com.lmaxdisruptor3.4.2

然后在src/java/resources目录添加log4j2.component.properties配置文件

# 设置异步日志系统属性log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

配置如下所示:

<?xml version="1.0" encoding="UTF-8"?>fileName="${LOG_HOME}/${LOG_MODULE_NAME}-infoLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-infoLog-%d{yyyy-MM-dd}-%i.log.gz"immediateFlush="false">fileName="${LOG_HOME}/${LOG_MODULE_NAME}-errorLog.log"filePattern="${LOG_ARCHIVE}/${LOG_MODULE_NAME}-errorLog-%d{yyyy-MM-dd}-%i.log.gz"immediateFlush="false">

当配置AsyncLoggerContextSelector作为异步日志时,请确保在配置中使用普通的 和元素。AsyncLoggerContextSelector将确保所有记录器都是异步的,使用的机制与配置 或时的机制不同。

通过log.info(“是否为异步日志:{}”, AsyncLoggerContextSelector.isSelected());可以查看是否为异步日志。

e1a8c096ddd61003185c4743102dd5ec.png

原文链接:

https://blog.csdn.net/ThinkWon/article/details/101625124

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值