設定およびデモ
全開にする方法
起動パラメータを追加します-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
スループットを。このとき、非同期および問題を解決することができない、より高速なアペンダを使用する必要があります。