【Java】Log4jを使った例外処理

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ログを出力すると、同じログが自動的に異なる出力先に出力されますLog4jAppender例えば:

  • コンソール: 画面に出力します。
  • ファイル: ファイルに出力します。
  • ソケット: ネットワーク経由でリモート コンピュータに出力します。
  • jdbc: データベースへの出力

ログを出力する際に​​は、フィルターを使用して、出力するログと出力する必要のないログを絞り込みます。たとえば、ERROR レベルのログのみを出力します。

最後に、レイアウトを通じてログ情報をフォーマットします。たとえば、日付、時刻、メソッド名などの情報を自動的に追加します。

上記の構造は複雑ですが、実際に使用する際には Log4j API を意識する必要はなく、設定ファイルを通じて設定します。

XML 設定を例に挙げると、XML 設定Log4jを使用する場合は、設定ファイルを読み込むためのlog4j2.xmlファイルを配置し、設定に従ってログを出力します。以下は構成ファイルの例です。classpathLog4j

<?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開発段階では、ログへの書き込みに常にインターフェイスが使用されるため、開発段階でインターフェイスを導入する必要はありませんLog4jLog4jログをファイルに書き込む必要がある場合は、正しい設定ファイルと関連する jar パッケージを に置くだけで、コードを変更することなく書き込みclasspathを使用するようにログを自動的に切り替えることができます。Log4j

まとめ

Commons Loggingログを実装すると、コードを変更せずに使用できますLog4j

を使用するには、関連する jar をそれに入れるLog4jだけですlog4j2.xmlclasspath

を置き換える場合は、関連するrLog4jを削除するだけです。log4j2.xmlja

参照されるインターフェイスは拡張するLog4j場合にのみ必要ですLog4j(たとえば、暗号化されたログをデータベースに書き込む機能は独自に開発する必要があります)。

おすすめ

転載: blog.csdn.net/ihero/article/details/132193887