1

私は 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>

今、すべてが正常に動作します。私MyAppenderSelectクエリを起動し、テーブルからいくつかの詳細を取得し、Java メール API を使用してそれらの詳細を送信します。私が使用してAsyncAppenderいるように、それは親スレッドをブロックせず、MyAppender ロジックは別のスレッドを使用して非同期的に実行されます。私の質問は、MyAppenderロジックが完了する前に親スレッドが実行MyAppenderを完了した場合、親スレッドは実行を完了しますか?

私のアプリケーションは Tomcat にデプロイされます

ありがとう!

4

1 に答える 1