Log4jを使用する
前述したようにCommons Logging
、「ロギング インターフェイス」として使用できます。そして、実際の「ロギング実装」では Log4j を使用できます。
Log4j
は非常に人気のあるロギング フレームワークで、最新バージョンは 2.x です。
Log4j
これはコンポーネント設計のログ システムであり、そのアーキテクチャは大まかに次のとおりです。
log.info("User signed in.");
│
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
├──>│ Appender │───>│ Filter │───>│ Layout │───>│ Console │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘
│
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
├──>│ Appender │───>│ Filter │───>│ Layout │───>│ File │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘
│
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
└──>│ Appender │───>│ Filter │───>│ Layout │───>│ Socket │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
を使用してLog4j
ログを出力すると、同じログが自動的に異なる出力先に出力されますLog4j
。Appender
例えば:
- コンソール: 画面に出力します。
- ファイル: ファイルに出力します。
- ソケット: ネットワーク経由でリモート コンピュータに出力します。
- jdbc: データベースへの出力
ログを出力する際には、フィルターを使用して、出力するログと出力する必要のないログを絞り込みます。たとえば、ERROR レベルのログのみを出力します。
最後に、レイアウトを通じてログ情報をフォーマットします。たとえば、日付、時刻、メソッド名などの情報を自動的に追加します。
上記の構造は複雑ですが、実際に使用する際には Log4j API を意識する必要はなく、設定ファイルを通じて設定します。
XML 設定を例に挙げると、XML 設定Log4j
を使用する場合は、設定ファイルを読み込むためのlog4j2.xml
ファイルを配置し、設定に従ってログを出力します。以下は構成ファイルの例です。classpath
Log4j
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<!-- 定义日志格式 -->
<Property name="log.pattern">%d{MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36}%n%msg%n%n</Property>
<!-- 定义文件名变量 -->
<Property name="file.err.filename">log/err.log</Property>
<Property name="file.err.pattern">log/err.%i.log.gz</Property>
</Properties>
<!-- 定义Appender,即目的地 -->
<Appenders>
<!-- 定义输出到屏幕 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 日志格式引用上面定义的log.pattern -->
<PatternLayout pattern="${log.pattern}" />
</Console>
<!-- 定义输出到文件,文件名引用上面定义的file.err.filename -->
<RollingFile name="err" bufferedIO="true" fileName="${file.err.filename}" filePattern="${file.err.pattern}">
<PatternLayout pattern="${log.pattern}" />
<Policies>
<!-- 根据文件大小自动切割日志 -->
<SizeBasedTriggeringPolicy size="1 MB" />
</Policies>
<!-- 保留最近10份 -->
<DefaultRolloverStrategy max="10" />
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<!-- 对info级别的日志,输出到console -->
<AppenderRef ref="console" level="info" />
<!-- 对error级别的日志,输出到err,即上面定义的RollingFile -->
<AppenderRef ref="err" level="error" />
</Root>
</Loggers>
</Configuration>
Log4j の設定は面倒ですが、一度設定してしまえば非常に便利です。上記設定ファイルの場合、INFOレベルのログはすべて自動的に画面に出力されますが、ERRORレベルのログは画面に出力されるだけでなく、同時にファイルにも出力されます。また、ログ ファイルが指定されたサイズ (1MB) に達すると、Log4j は自動的に新しいログ ファイルを切り取り、最大 10 個のコピーを保持します。
Log4j はサードパーティのライブラリでもあるため、構成ファイルを用意するだけでは十分ではありません。ここから Log4j をダウンロードし、解凍した後、次の 3 つの jar パッケージをクラスパスに配置する必要があります。
log4j-api-2.x.jar
log4j-core-2.x.jar
log4j-jcl-2.x.jar
Log4j は自動的に検出されて使用されるためCommons Logging
、前のセクションでダウンロードしたものをcommons-logging-1.2.jar
クラスパスに配置します。
Commons Logging
ログを出力するには、コードを変更せずに、文言に従って記述するだけで、次のような Log4j のログ出力を取得できます。
03-03 12:09:45.880 [main] INFO com.itranswarp.learnjava.Main
Start process...
ベストプラクティス
Commons Logging
開発段階では、ログへの書き込みに常にインターフェイスが使用されるため、開発段階でインターフェイスを導入する必要はありませんLog4j
。Log4j
ログをファイルに書き込む必要がある場合は、正しい設定ファイルと関連する jar パッケージを に置くだけで、コードを変更することなく書き込みclasspath
を使用するようにログを自動的に切り替えることができます。Log4j
まとめ
Commons Logging
ログを実装すると、コードを変更せずに使用できますLog4j
。
を使用するには、関連する jar をそれに入れるLog4j
だけです。log4j2.xml
classpath
を置き換える場合は、関連するrLog4j
を削除するだけです。log4j2.xml
ja
参照されるインターフェイスは拡張するLog4j
場合にのみ必要ですLog4j
(たとえば、暗号化されたログをデータベースに書き込む機能は独自に開発する必要があります)。