公式文書と説明log4j2非同期ログ設定の問題

設定およびデモ

全開にする方法

起動パラメータを追加します-DLog4jContextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
少しことわざの主要パラメータを開始:
公式ドキュメントをhttp://logging.apache.org/log4j/2.x/manual/async #AllAsync .htmlのキーが-Dlog4j2.contextSelector = ...です
が、あなたが個人的に実験を行う、または個人的に使用している場合、あなたは単にあなたのバージョンで使用し、問題に気づくことがあります。
-DLog4jContextSelector = org.apache.logging .log4j.core.async.AsyncLoggerContextSelector // == ==フルバージョンはサポートしています
バージョンが-Dlog4j2.contextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector // == 2.10.0 ==をサポートしています

関連コード(2.10.0以降):
org.apache.logging.log4j.util.PropertiesPropertySourceとを参照してください
org.apache.logging.log4j.util.PropertiesUtil.Environment
構成データ、異なるキー、同じサービスセマンティクスの3セットがあります。環境:

literal
{java.runtime.name=Java(TM) SE Runtime Environment}


normalized
{log4j2.javaRuntimeName=Java(TM) SE Runtime Environment} key 是log4j2.前缀 加上驼峰形式变量

tokenized
{[java, runtime, name]=Java(TM) SE Runtime Environment}  key是list

2つの同期非同期を混合する方法

<!-- 使用异步日志时,启用如下配置,异步配置默认不打印location。此种方法无需配置JVM启动参数。 -->
<asyncRoot level="debug">
    <AppenderRef ref="Console" />
</asyncRoot>

いくつかの注意

  • デフォルトの位置情報は、行番号、クラス、メソッドなど、印刷されません。私たちは、必要に応じて追加する必要がありincludeLocation="true"ますが、公式声明によると、30から100倍遅くなります。
  • 非同期時には、そのような「ハロー{}」に変更されたログ情報で参照されるオブジェクトの実際のフィールド値の印刷ログ場合、これをuser.name。これは、印刷ログの精度には影響しません。log4jのは、スナップショットの仕組みを作ったので答えは、ノーです。

医療過誤非同期ログ

無欠点のない唯一の利点は、非同期ログは、公式には使用されていないいくつかのシーン(欠点)が得られます:

  • 例外処理。でも、例外ハンドラですべてのケースをカバーすることはできません。
  • タイムスナップショットをログに記録しないことにより、このような際、MapMessageやStructuredDataMessageなどいくつかの用途、この問題では、非同期印刷情報が変更される可能性を避けます
  • 例えばCPUのようないくつかの状況において、CPU
  • はるかに高速ログ印刷appenderスループットを。このとき、非同期および問題を解決することができない、より高速なアペンダを使用する必要があります。

おすすめ

転載: www.cnblogs.com/simoncook/p/10964076.html