私は何かを見逃しているはずですが、私はこれを数日間見てきましたが、なぜ地球上でlog4jではなくlog4j2を使用するのですか?
私がこれまで見てきたことから、log4j2は設定が簡単であると宣伝されていますが、実際には非常に複雑です(3日前になり、ホームディレクトリにログを書き込むことができません)。自動構成は単に私には機能しません(または少なくとも私はそれを機能させることができません)、構成ファイル自体は構造がかなり複雑であり、診断に役立つものを実行時に追加するのがはるかに難しいようです.
パフォーマンス以外に、元のlog4jよりもlog4j2を使用する理由はありますか?
Log4j 1.xからLog4j 2にアップグレードする理由
注意してください
log4j-1.2-api
アダプターでサポートされていますが、Log4j 1.2内部に依存するカスタマイズは機能しない場合があります。アップグレード時のヒント
Log4j2の使用開始時に発生する一般的な問題:
log4j.configurationFile
システムプロパティでそのパスを指定します<Configuration status="trace">
を使用します問題が上記のいずれでもない場合、設定を表示し、発生している問題の詳細を提供してください。 (自動構成に何が期待されるかわかりません。これは、log4j2が構成ファイルを見つけられない場合にコンソールにERRORイベントを記録する非常に基本的な機能です。これで十分なことはめったにありません。)
ホームディレクトリに書き込むには、システムプロパティ lookup${sys:PROPERTYNAME}
を使用できます。以下は、実証するための構成例です。
<Configuration status="trace">
<Properties>
<Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
<File name="FILE" fileName="${sys:logfile}">
<PatternLayout>
<pattern>%d %p [%t] %c{1.} %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="STDOUT" level="ERROR" />
<AppenderRef ref="FILE" />
</Root>
</Loggers>
</Configuration>
this を確認してください。要するに、リンクから:
Log4j 2.0の導入:
新しいプラグインシステム
プロパティのサポート
jSONベースの構成とその構成の自動再読み込みのサポート。
SLF4J、Commons Logging、Apache Flume、Log4j 1.xなど、既存の多くのロギングフレームワークをサポートし、新しいプログラマーのAPIを提供します。
あなたが言ったように、それははるかに速いです。
欠点は次のとおりです。
log4j 2.0はlog4j 1.xとは大きく異なり、APIはほとんど互換性がありません。
セットアップが難しい。
新しい機能が必要ない場合は、おそらく古いLog4j 1.xで問題ありません。