当前位置: 首页 > 知识库问答 >
问题:

log4j2:异步记录器未启动

慕和惬
2023-03-14

我最近升级了我的应用程序以使用log4j2。我正在尝试利用它的异步记录器特性。然而,看起来它并没有创建一个。根据Log4j异步配置,它说,

  1. 要使所有记录器都是异步的,请将中断器jar添加到类路径中,并将系统属性Log4jContextSelector设置为org.apache.logging.log4j.core.async.AsyncloggerContextSelector。我还设置了log4j.xml中的status=“trace”,以查看它是否配置和实例化了异步记录器。但似乎失败了。

2017-01-25 01:58:30,799主跟踪正在重新注册上下文(1/1):“AsyncContext@18b4aac2”org.apache.logging.log4j.core.Async.AsyncloggerContext@6bf08014 2017-01-25 01:58:30,800主跟踪正在注销但未找到与“org.apache.logging.log4j2:Type=AsyncContext@18b4aac2”匹配的MBeans“2017-01-25 01:58:30,800主跟踪正在注销但未找到与”org.apache.logging.log4j2:Type=AsyncContext@18b4aac2“pache.logging.log4j2:Type=AsyncContext@18b4aac2,Component=AsyncContext@18b4aac2,Name='2017-01-25 01:58:30,801 main TRACE正在注销但未找到匹配'org.apache.logging.log4j2:Type=AsyncContext@18b4aac2,Component=AsyncContext@18b4aac2,Component=RingBuffer'2017-01-25 01:58:30,802 main TRACE正在注销但未找到匹配'org.apache.logging.log4j2:Type=AsyncContext,S.2017-01-25 01:58:30,816使用DummyNanoClock进行纳秒时间戳的主跟踪。2017-01-25 01:58:30,817在URI/etc/opt/sun/im/default/config/log4j2.xml(org.apache.logging.log4j.core.async.asyncloggercontext@6bf08014)处完成上下文[name=asynccontext@18b4aac2]的主调试重新配置,可选类加载器:null 2017-01-25 01:58:30,817主调试关闭挂钩已启用。注册一个新的。2017-01-25 01:58:30,818主调试LoggerContext[name=asyncContext@18b4aac2,org.apache.logging.log4j.core.async.asyncloggerContext@6bf08014]启动正常。

因为我没有看到类似“启动异步中断器”的东西。

然后按照建议,我尝试使用asyncLogger标记,我可以看到它在打印,

2017-01-25 00:27:26,970 main TRACE AsyncloggerConfigDristrator正在为此配置创建新中断程序。2017-01-25 00:27:26,971主跟踪属性AsyncLoggerConfig.WaitStrategy=TimeoutBlockingWaitStrategy,ExceptionHandler=org.apache.logging.log4j.Core.Async.AsynclogerConfigDefaultExceptionHandler@7F284218...2017-01-25 00:27:26,988 main TRACE AsyncloggerConfig[xmpd]正在启动...

但在稍后阶段,它再次为未找到的类抛出异常,

2017-01-25 00:27:31,658主要错误:无法调用元素Asynclogger的类org.apache.logging.log4j.core.async.AsyncloggerConfig中的类中的工厂方法。java.lang.Reflect.InvocationTargetException在Sun.Reflect.NativeMethodAccessorInvoke0(原生方法)在Sun.Reflect.NativeMethodAccessorInvoke(nativeMethodAccessorInvoke.java:62)在Sun.Reflect.DelegatingMethodAccessorInvoke(delegatingMethodAccessorInvoke.java:43)在java.lang.Reflect.MethodInvoke(Method.java:498)在log4j.core.config.abstractconfiguration.start(abstractconfiguration.Java:239)在org.apache.logging.log4j.core.loggercontext.setconfiguration(loggercontext.Java:530)在org.apache.logging.log4j.core.loggercontext.reconfigure(loggercontext.Java:603)在guration.java:197)在org.apache.logging.log4j.core.asyncloggerconfig.(asyncloggerconfig.createlogger(asyncloggerconfig.java:188)...23其他原因:java.lang.classnotfoundexception:com.lmax.disruptor.eventFactory在java.net.urlclassloader.findClass(urlclassloader.java:381)在java.lang.classloader.java:381)在sun.misc.launcher

我已经验证了,我包含的干扰器罐子有这个类。我使用的是Disruptor-3.3.6.jar。

另外,如何验证异步记录器是否已经启动?

如有任何帮助,我们将不胜感激。

共有1个答案

漆雕奇逸
2023-03-14

要使用AsyncLogger,您的pom.xml应该如下所示

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency> 
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.3.7</version>
    </dependency>

进一步阅读:log4j2与log4j1相比的性能

 类似资料:
  • 我正在尝试设置log4j2以使用异步记录器将所有消息记录到滚动文件中。 是否有一种方法可以创建另一个记录程序来捕获所有事件?还有别的想法吗? 下面是我的log4j2.xml:

  • 背景: 在log4j2中,当使用asyncappender时,您可以将记录器的参数“blocking”设置为false,以便丢弃溢出缓冲区大小的任何日志,而不会减慢主线程的速度。(请参见asyncAppender下的此处。)https://logging.apache.org/log4j/2.x/manual/appenders.html) 我正在将我们的应用程序升级到这里找到的辉煌的asyncL

  • 基于https://logging.apache.org/log4j/2.x/manual/async.html我想使用混合同步和异步记录器的方法,以便从所有同步记录器的性能改进中获益。 基准代码: Log4j2配置正是文档中的配置(https://logging.apache.org/log4j/2.x/manual/async.html): 使用这种混合的同步/异步记录器配置,我可以每秒获得大

  • 使用log4j2,我很难让同步记录器和异步记录器一起工作。 从这里以Apache文档(标题为混合同步和异步记录器)为例,运行下面的应用程序将简单地创建日志文件,但不向其写入任何内容。我也不确定添加两个记录器指向同一个appender,但它的Apache留档,所以我假设这是好的。 LOG4J2配置 pom.xml 应用 但是,如果我更改log4j2配置并修改loggers元素以读取以下内容,我将在日

  • 我想让一些记录器异步在log4j2.properties文件。在xml格式中,您可以添加为 我在log4j2中试过了。作为记录器的属性=com foo Bar 但这种语法似乎是错误的。 正确的配置方法是什么?

  • 我对在log4j2中使用异步记录器时的默认缓冲区大小有一个问题。log4j2的版本是,由Spring引导log4j2starter 2.1.13引入。释放 看起来留档中的不同地方指的是不同的值。异步记录器文档将大小称为。然而,log4j2常规配置文档提到,当以无垃圾模式运行时,大小为,但则不然。log4j2及以上版本默认以无垃圾模式运行。 但是,当我启动应用程序时,将StatusLogger设置为