私は 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
ロジックが完了する前に親スレッドが実行MyAppender
を完了した場合、親スレッドは実行を完了しますか?
私のアプリケーションは Tomcat にデプロイされます。
ありがとう!