【发布时间】:2013-10-18 13:12:46
【问题描述】:
我正在使用 log4j AsyncAppender。我编写了自己的附加程序来自定义记录器,如下所示。
public class MyAppender extends AppenderSkeleton {
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
return false;
}
@Override
protected void append(LoggingEvent event) {
//Here am doing some logic which will connect database and fetch some records.
// This process might take few seconds
}
}
我的 log4j 配置:
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<!-- Appenders -->
<appender name="stdout" class="com.sample.MyAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %p [%c] - %m%n"/>
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<param name="BufferSize" value="500"/>
<appender-ref ref="stdout"/>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ASYNC" />
</root>
</log4j:configuration>
现在一切正常。我 MyAppender 我将触发 Select 查询并从表中获取一些详细信息并使用 java 邮件 API 发送这些详细信息。当我使用AsyncAppender时,它不会阻塞父线程并且MyAppender逻辑是使用单独的线程异步执行的。我的问题是父线程是否在MyAppender逻辑完成之前完成了它的执行,那么是否有任何保证逻辑inMyAppender 即使父线程完成执行也会完成?
我的应用程序将部署在 Tomcat 上。
谢谢!
【问题讨论】:
标签: java logging log4j java-ee-6