log4j2采用AsyncLogger出现的错误及解决方案

目录
  • log4j2采用AsyncLogger的错误
    • 配置文件,配置日志打印控制
    • 解决方法
  • log4j的AsyncLogger的name属性
    • 可以是包路径比如:org.apache
    • 也可以是自定义名字比如:myLogger

log4j2采用AsyncLogger的错误

配置文件,配置日志打印控制

Appender采用默认同的(不额外加异步控制的Async)

Logger采用异步的AsyncLogger(root无所谓)

如果此时是这样配置的,也就是想要使用AsyncLogger + (sync)Appender的方式,但是却出错了:

Unable to invoke factory method in class class org.apache.logging.log4j.core.async.AsyncLoggerConfig for element AsyncLogger. java.lang.reflect.InvocationTargetException

解决方法

pom文件中,或者说项目的依赖jar包中,只引入了log4j2的相关api包和core包。

补充一个 额外的log4j2本身代码逻辑所依赖的 disruptor包。

问题解决!!!

问题来源:log4j2的AsyncLogger本身的逻辑采用了缓冲区思想,使用的是disruptor框架来实现一个环形无锁队列。

让人想不到的是,这个东西竟然需要自己引入依赖jar包!!!

log4j的AsyncLogger的name属性

可以是包路径比如:org.apache

使用方式:

Logger logger=LoggerFactory.getLogger(getClass());

那么所有org.apache包下的日志都写在这个asynclogger

也可以是自定义名字比如:myLogger

使用方式:

Logger logger=LoggerFactory.getLogger("myLogger");

那么该日志写在这个asynclogger

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 处理Log4j2不能打印行号的问题(AsyncLogger)

    目录 Log4j2不能打印行号问题(AsyncLogger) 背景 解决方案 注意 附完整配置节点 Log4j2异步日志中打印方法名和行号信息 解决方案 pom配置 属性配置 Log4j2不能打印行号问题(AsyncLogger) 背景 %d{yyyy-MM-dd HH:mm:ss,SSS} %level [%t] %logger{36}(%F:%L) - %m%n 日志的输出格式已经指定了文件名.行号显示,可是打印出来却是空的,为什么?答案在这里: 解决方案 pom.xml <dependen

  • log4j2异步打印性能提升方式

    目录 log4j2异步打印性能提升 分析原因 解决方案 log4j2性能提升点 理解为以下三点 log4j2异步打印性能提升 压测结果发现,log4j升级成log4j2之后对系统性能影响并不大,更改打印日志方式(同步修改成异步打印) 压测结果发现TPS在开始阶段提升较快,当压力上来之后,TPS下降迅速,不如同步的数据(log4j2用的版本是2.3) 分析原因 获取压测是堆栈日志如下: 发现线程都在跑LockSupport.parkNanos也就是unsafe.park(false, 1);(pr

  • 使用Log4j2代码方式配置实现线程级动态控制

    目录 一 需求 二 对外暴露的接口 三 代码方式配置Log4j2日志对象 四 线程级日志对象的设计 五 标准日志头 六 异常日志的堆栈信息打印 七 测试 一 需求 最近平台进行升级,要求日志工具从Log4j升级到Log4j2,以求性能上的提升.之前我写过以代码方式的配置Log4j,来实现线程级日志对象的管理,今天把版本升级到Log4j2,依然采用原有思路来做,但是实现上有诸多区别,这是因为Log4j2的实现较老版本改动太多. 至于以配置文件方式配置的方法,我不做介绍,对于Log4j2的详细实现亦

  • log4j2.xml文件详解及在日志中加入全局guid

    目录 log4j2.xml文件及在日志中加入全局guid 只有定义了这个,上面的才会真实有效 想在日志中加入全局guid需要修改日志的格式 log4j2.x配置文件中各标签 1.Logger 完成日志信息的处理 2.Appender 设置在哪输出日志信息 3.Layout 设置日志信息的输出格式 4.Filters 5.Status 6.monitorInterval 7.Policies 配置日志相关策略 log4j2.xml文件及在日志中加入全局guid <Configuration sta

  • log4j2的异步使用及添加自定义参数方式

    目录 log4j2异步使用及添加自定义参数 添加依赖(这里省略了版本号) 下面写一个生产可用的log4j2.xml的模板 补充知识 自定义日志格式 如何在日志中添加自己想传的参数? log4j 输入自定义参数 测试代码如下 log4j2异步使用及添加自定义参数 关于log4j2的性能和原理就不赘述了,这篇主要讲使用,配置文件解读,和添加自定义参数,偏应用的一篇文章. 相比与其他的日志系统,log4j2丢数据这种情况少:disruptor技术,在多线程环境下,性能高于logback等10倍以上:利

  • 详谈异步log4j2中的location信息打印问题

    目录 异步log4j2的location信息打印问题 说下解决 1.全异步 同步异步混合 log4j2支持异步打印提高打印输出速度 pom依赖添加 全局模式2两种 局部模式 AsyncLogger 异步log4j2的location信息打印问题 背景:项目改造过程中将log4j2改成异步,发现行号没有打印,于是扒了下官方文档,大概陈述下: 先说一下这个问题是怎么解决的,然后稍微扩展一下其他配置,有兴趣的可以往下看或者溜一遍官方文档 说下解决 在<AsyncLogger>标签中配置include

  • log4j2采用AsyncLogger出现的错误及解决方案

    目录 log4j2采用AsyncLogger的错误 配置文件,配置日志打印控制 解决方法 log4j的AsyncLogger的name属性 可以是包路径比如:org.apache 也可以是自定义名字比如:myLogger log4j2采用AsyncLogger的错误 配置文件,配置日志打印控制 Appender采用默认同的(不额外加异步控制的Async) Logger采用异步的AsyncLogger(root无所谓) 如果此时是这样配置的,也就是想要使用AsyncLogger + (sync)A

  • 记一次EFCore类型转换错误及解决方案

    一  背景 今天在使用EntityFrameworkCore 查询的时候在调试的时候总是提示如下错误:Unable to cast object of type 'System.Data.SqlTypes.SqlString' to type 'System.Data.SqlTypes.SqlGuid' 第一次看这个报错肯定是数据库实体和EFCore中定义的某种类型不匹配从而导致类型转换错误,但是业务涉及到这么多的实体Entity,那么到底是哪里类型无法匹配呢?所以第一步肯定是调试代码,然后看报

  • Spring Boot MQTT Too many publishes in progress错误的解决方案

    目录 前言 原因分析 源码分析 MQTT的Push消息到缓存中时序图 MqttPahoMessageHandler的publish方法 MqttAsyncClient的publish方法 ClientComms的internalSend方法 ClientState的send方法 异步发送消息时序图 ClientComms的conncect方法 ConnectBG的run方法 CommsSender的run方法 CommsSender的notifySent方法 小结 解决方案 方案1:发送消息时设

  • SQL Server 2005附加数据库时Read-Only错误的解决方案

    SQL Server 2005附加数据库文件时出现了Read-Only错误,附加的时候,系统提示mdf文件为只读,可是打开文件属性,这个属性不为只读.该怎么解决呢?本文我们就介绍了这一解决方案,接下来就让我们来一起了解一下吧. 两种解决方法如下: 1.重新打开数据库软件,在登录认证框那里选择:Windows authentication进行登录.然后再附加数据库,这时附加的就没有Read-Only了. 2.在*.mdf文件的属性里,找到"安全"页,然后把里面所有的"组或用户名

  • 详解Vue中使用v-for语句抛出错误的解决方案

    Vue 中使用v-for语句抛出错误的解决方案 今天在维护以前的项目的时候遇见了下面的报错情况,开始我以为是因为jQuery和Vue冲突了,所以把以前的jQuery改了,但是还是出现同样的错误-通过查阅资料,发现是因为循环的变量里面的值重复了,导致Vue报错. 复制代码 代码如下: Uncaught (in promise) TypeError: Cannot read property 'removeChild' of null 接下来查了一下解决方案,发现在Vue 2.0之前的版本可以通过在

  • Android笔记整理之常见错误及解决方案汇总

    一.No active compatible AVD's or devices found. Relaunch this configuration after connecting a device or starting an AVD. 修改adb server的端口,设置一个系统环境变量ANDROID_ADB_SERVER_PORT,值7913(随意一个数字),再启动adb server 步骤: a)进入cmd命令模式 b)cd XXX\platform-tools c)adb start

  • MySql插入数据成功但是报[Err] 1055错误的解决方案

    1.问题: 这两天做insert操作,mysql版本是5.7,insert后虽然成功了,但是会报一个[Err] 1055的错误.具体如下: 2.解决方案: linux环境下,vim到my.cnf,添加如下语句: sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 最后保存退出,重启mysql 3.测试 看一下是否解决 可以看到已经没有error了. 总结 以上所述是小编给大家介绍的MySql插入数据成功但是报[Err] 1055错误的解决方案,

  • Windows10 1903错误0xc0000135解决方案【推荐】

    windows10 1903是2019年Mircosoft推出的最新版windows操作系统,但是有很多机器装上之后会存在不支持.net framework的现象,因此在这里,笔者为大家带来了解决该问题简单好用的方案. It is so easy!!! Come 三步走 找个地方创建一个txt文本文件(最好用英文命名) 复制以下内容到txt文件里,并保存退出 start /w pkgmgr /iu:Microsoft-Windows-NetFx3-OC-Package start /w pkgm

  • Android Studio升级4.1.1后各种错误和解决方案

    1,CMake Error: CMake was unable to find a build program corresponding to "Ninja". 因为项目中使用到Cmake编译的C/C++代码,升级了Android Studio后编译出现CMake Error: CMake was unable to find a build program corresponding to "Ninja".CMAKE_MAKE_PROGRAM is not se

  • redis 使用lettuce 启动内存泄漏错误的解决方案

    redis 使用 lettuce 出现 LEAK: hashedwheelTimer.release() was not called before it's garbage-collected. Enable advanced leak 内存泄漏.其实是内存不够大导致. 找到eclispe 中window->preferences->Java->Installed JRE ,点击右侧的Edit 按钮,在编辑界面中的 "Default VM Arguments "选项

随机推荐