logComposerタグのqueue属性で、ログが利用するキューを指定できます。
ログを出力している間はアプリケーションの処理が中断します。ログのキューを指定することで、アプリケーション処理の完了後に適当なタイミングでログを出力できます。この機能を使用して、アプリケーションのレスポンスに影響なくログを出力できます。
キューのサイズ(メッセージを蓄積できる数)を指定することで、ログメッセージによるメモリの枯渇を防ぎます。この上限を超えてメッセージを出力しようとした場合、出力の実行により空きができるまで待たされます。
アプリケーション連携実行基盤のログ機能では、デフォルトでログのキューを有効にしています。queue属性に-1を指定するとキューは無効となります。
<logComposer name="Log1" queue="100"> <output name="myStdOut" type="stdout"/> </logComposer> |
ログのキューイングを有効にした場合、LogComposerインスタンスごとにキューが生成されます。このため、複数のインスタンスから同一の出力先へ出力する場合、各キューが出力するタイミングによって、ログ出力中に別のログが割り込んで出力される場合があります。この現象をログの混在といいます。
また、標準出力や標準エラー出力へ出力する場合、コンテナが出力するログやSystem.out.printlnメソッドなどのログ出力クラス以外からの出力を行った場合にログの混在が発生する場合があります。
複数の管理名で同一の出力先へ出力する場合は、ログの混在を回避するために、ログ定義ファイルのoutputタグのtype属性にlogComposerを指定して、他の管理名の出力先へ出力するようにしてください。以下に例を示します。
<logComposer name="Log1"> <output name="sysStdOut" type="stdout"/> </logComposer> <logComposer name="Log2"> <output name="myLogOut" type="logComposer"> <!-- 定義名"Log1"のoutputタグの出力先へ出力 --> <param name="target" value="Log1"/> </output> </logComposer> |
コンテナが出力するログとの混在を防ぐためには、出力先を標準出力ではなく個別のファイルなどを指定して、ログ出力クラスを使用して出力するようにしてください。
注意
業務処理開始アプリケーションをJavaアプリケーションから実行する場合アプリケーションの終了時に、System.exit(int) を呼び出し、アプリケーションを終了します。
この場合、キューにあるログは出力されません。
IJServerを停止した場合、キューにあるログは出力されません。