【问题标题】:log4j asyncappender thread dies with main threadlog4j asyncappender 线程与主线程一起死亡
【发布时间】:2014-08-06 10:05:00
【问题描述】:

我创建了一个测试应用程序来使用 log4j jdbcAppender 和 asyncAppender 记录事件。在一个while循环中,我使用asyncAppender记录了500条错误消息,问题是当记录消息的线程完成时,asyncAppender线程也停止将消息记录到数据库中。

<appender name="async" class="org.apache.log4j.AsyncAppender">
        <param name="Threshold" value="ERROR"/>
        <param name="bufferSize" value="1"/> 
        <param name="blocking" value="false"/>
        <appender-ref ref="test_db"/> 
    </appender>

这个想法是在不阻塞的情况下将错误记录到数据库中。将阻塞设置为 true 会记录所有消息,但会使主线程等待日志记录。关于解决方案的任何想法?

bufferSize 设置为 1,以便每次通过时都会将消息记录到数据库中,原因是 db 上有一个警报系统来检查错误数量等。我还更改了 jdbcAppender使用连接池而不打开每个日志事件的连接。

谢谢。

更新: jdbc 追加器

<appender name="test_db" class="com.test.pooled.log4j.jdbcappender.PooledJDBCAppender"> <!-- EXTENDS JDBCAPPENDER TO USE CONNECTION POOL INSTEAD! -->
        <param name="Threshold" value="ERROR"/>
        <param name="URL" value="jdbc:mysql://localhost:3306/~removed~"/>
        <param name="Driver" value="com.mysql.jdbc.Driver"/>
        <param name="User" value="~removed~"/>
        <param name="Password" value="~removed~"/>
        <layout class="org.apache.log4j.PatternLayout"> 
            <param name="ConversionPattern" 
                   value="INSERT INTO ~removed this detail~
             /> 
        </layout>
    </appender>

【问题讨论】:

  • 显示JDBCAppender 的配置?
  • 你是如何测试它的?如果AsyncAppender在一个守护线程中运行,它会在所有非守护线程都完成后死掉。
  • jdbc appender 添加。使用基本的测试应用程序对其进行测试以记录一些错误消息。
  • @Kayaman 所以如果我有一个创建线程 A 和线程 B 的应用程序,并且 A 将 500 条错误消息记录到异步附加程序然后停止但线程 B 仍在运行,那么异步附加程序是否会停止线程 A 还是会因为线程 B 仍在运行而继续记录?
  • 如果线程 B 是非守护进程并且异步记录器线程是守护进程,那么是的。

标签: java asynchronous jdbc log4j


【解决方案1】:

doc 所说的那样使用关机钩子就可以了:

<configuration debug="true">
   <!-- in the absence of the class attribute, assume 
   ch.qos.logback.core.hook.DefaultShutdownHook -->
   <shutdownHook/>
  .... 
</configuration>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多