Javaロギングの概要
1概要
2ロギングを有効にする
この記事で説明したすべてのロギングフレームワークは、ロガー、アペンダ、およびレイアウトの概念を共有しています。プロジェクト内でロギングを有効にするには、3つの一般的な手順に従います。
-
必要なライブラリを追加する
-
設定
-
ログステートメントの配置
今後のセクションでは、各フレームワークの手順について個別に説明します。
3 Log4j 2
Log4j 2はLog4jロギングフレームワークの新しい改良版です。最も説得力のある改善は、非同期ロギングの可能性です。
Log4j 2には以下のライブラリが必要です。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.1</version>
</dependency>
log4j-api
の最新バージョンあなたはhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.logging.log4j%22%20AND%20a%3A%22log4j-を見つけることができますapi%22[ここ]および
log4j-core
–
https://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22org.apache.logging.log4j%22%20AND%20a%3A%
22log4j-core%22[ここ]。
3.1. 構成
Log4j 2の設定は、メインの設定
log4j.xml
ファイルに基づいています。
最初に設定するものはアペンダです。
これらはログメッセージがどこにルーティングされるか決定します。宛先は、コンソール、ファイル、ソケットなどです。
Log4j 2にはさまざまな目的のための多くのアペンダがあります、あなたは公式のhttps://logging.apache.org/log4j/2.x/manual/appenders.html[Log4j 2]のサイトでより多くの情報を見つけることができます。
簡単な設定例を見てみましょう。
<Configuration status="debug" name="baeldung" packages="">
<Appenders>
<Console name="stdout" target="SYSTEM__OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
</Console>
</Appenders>
</Configuration>
アペンダごとに名前を設定できます。たとえば、
stdout
の代わりにname
console
を使用します。
PatternLayout
要素に注意してください – これはメッセージがどのように見えるべきかを決定します。この例では、パターンは
pattern
パラメータに基づいて設定されます。ここで、
%d
は日付パターンを決定し、
%p
– ログレベルの出力、
%m
– ログメッセージの出力、および
%n
は新しい行記号を追加します。あなたが公式https://logging.apache.org/log4j/2.x/manual/layouts.html[Log4j 2]ページで見つけることができるパターンについてのより多くの情報。
最後に – ** アペンダを有効にするには(または複数の場合)、
<Root>
セクションに追加する必要があります。
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
3.2. ファイルへのログ記録
ファイルへのログ記録を使用する必要がある場合もあるので、
fout
loggerを設定に追加します。
<Appenders>
<File name="fout" fileName="baeldung.log" append="true">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%nw</Pattern>
</PatternLayout>
</File>
</Appenders>
File
アペンダには、設定可能ないくつかのパラメータがあります。
-
file
– ログファイルのファイル名を決定します -
append
– このパラメータのデフォルト値はtrueです。
デフォルトでは
File
アペンダは既存のファイルに追加され、切り捨てられません。
前の例で説明した**
PatternLayout
。
File
appenderを有効にするには、それを
<Root>
セクションに追加する必要があります。
<Root level="INFO">
<AppenderRef ref="stdout"/>
<AppenderRef ref="fout"/>
</Root>
3.3. 非同期ロギング
Log4j 2を非同期にしたい場合は、LMAXディスラプターライブラリを
pom.xml
に追加する必要があります。 LMAXディスラプターは、ロックフリーのスレッド間通信ライブラリです。
pom.xmlにディスラプターを追加します。
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.4</version>
</dependency>
最新版のディスラプタはhttps://search.maven.org/classic/#search%7C1%7Cg%3A%22com.lmax%22%20AND%20a%3A%22disruptor%22[ここ]にあります。
LMAXディスラプターを使用したい場合は、設定で
<Root>
の代わりに
<asyncRoot>
を使用する必要があります。
<AsyncRoot level="DEBUG">
<AppenderRef ref="stdout"/>
<AppenderRef ref="fout"/>
</AsyncRoot>
または、システムプロパティ
Log4jContextSelector
を
org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
に設定することによって、非同期ロギングを有効にすることもできます。
もちろんLog4j2非同期ロガーの設定についてもっと読んで、https://logging.apache.org/log4j/2.x/manual/async.html[Log4j2公式ページ]でいくつかのパフォーマンス図を見ることができます。
3.4. 使用法
以下は、ロギングにLog4jを使用する方法を示す簡単な例です。
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class Log4jExample {
private static Logger logger = LogManager.getLogger(Log4jExample.class);
public static void main(String[]args) {
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
実行後、アプリケーションはコンソールと__baeldung.logというファイルの両方に次のメッセージを記録します。
2016-06-16 17:02:13 INFO Info log message
2016-06-16 17:02:13 ERROR Error log message
ルートログレベルを
ERROR
に上げると、次のようになります。
<level value="ERROR"/>
出力は次のようになります。
2016-06-16 17:02:13 ERROR Error log message
ご覧のとおり、ログレベルをupperパラメータに変更すると、ログレベルが低いメッセージはアペンダに出力されません。
メソッド
logger.error
は、発生した例外をログに記録するためにも使用できます。
try {
//Here some exception can be thrown
} catch (Exception e) {
logger.error("Error log message", throwable);
}
3.5. パッケージレベルの設定
たとえば
com.baeldung.log4j2
などの特定のパッケージから、ログレベルTRACEでメッセージを表示する必要があるとしましょう。
logger.trace("Trace log message");
他のすべてのパッケージでは、INFOメッセージのみを記録し続けたいと思います。
TRACEは設定で指定したルートログレベルINFOより低いことに注意してください。
1つのパッケージに対してのみロギングを有効にするには、
<Root>
の前に次のセクションを
log4j.xml
で追加する必要があります。
<Logger name="com.baeldung.log4j2" level="debug">
<AppenderRef ref="stdout"/>
</Logger>
com.baeldung.log4j
パッケージのログ記録が有効になり、出力は次のようになります。
2016-06-16 17:02:13 TRACE Trace log message
2016-06-16 17:02:13 DEBUG Debug log message
2016-06-16 17:02:13 INFO Info log message
2016-06-16 17:02:13 ERROR Error log message
4ログバック
LogbackはLog4jを作成したのと同じ開発者によって開発されたLog4jの改良版であることを意味します。
LogbackにはLog4jと比較してはるかに多くの機能があり、それらの多くはLog4j 2にも導入されています。
公式サイト
で、Logbackのすべての利点について簡単に説明します。
まず、
pom.xml
に次の依存関係を追加します。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
この依存関係は他の2つの依存関係、
logback-core
と
slf4j-api
を他動的に引き込みます。 Logbackの最新版はhttps://search.maven.org/classic/#search%7Cgav%7C1%7Cg%3A%22ch.qos.logback%22%20AND%20a%3A%22logback-classicにあります。 %22[ここ]
4.1. 構成
ログバックの設定例を見てみましょう。
<configuration>
# Console appender
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
# Pattern of log message for console appender
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</Pattern>
</layout>
</appender>
# File appender
<appender name="fout" class="ch.qos.logback.core.FileAppender">
<file>baeldung.log</file>
<append>false</append>
<encoder>
# Pattern of log message for file appender
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5p %m%n</pattern>
</encoder>
</appender>
# Override log level for specified package
<logger name="com.baeldung.log4j" level="TRACE"/>
<root level="INFO">
<appender-ref ref="stdout"/>
<appender-ref ref="fout"/>
</root>
</configuration>
LogbackはSLF4Jをインターフェースとして使用するので、SLF4Jの
Logger
と
LoggerFactory.
をインポートする必要があります
4.2. SLF4J
SLF4Jは、ほとんどのJavaロギングフレームワークに共通のインターフェースと抽象化を提供します。ファサードとして機能し、ロギングフレームワークの基礎となる機能にアクセスするための標準化されたAPIを提供します。
LogbackはSLF4Jをその機能のネイティブAPIとして使用します。以下はLogbackロギングを使用した例です。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Log4jExample {
private static Logger logger = LoggerFactory.getLogger(Log4jExample.class);
public static void main(String[]args) {
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
出力は前の例と同じままです。
5 Log4J
最後に、由緒あるLog4jロギングフレームワークを見てみましょう。
現時点では時代遅れですが、現代の後継者の基盤を築いているので議論する価値があります。
設定の詳細の多くは、Log4j 2のセクションで説明したものと一致しています。
5.1. 構成
まず最初に、Log4jライブラリをあなたのプロジェクトに追加する必要があります
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
Here
Log4jの最新バージョンを見つけることができるはずです。
コンソールアペンダが1つだけの単純なLog4j設定の完全な例を見てみましょう。
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration debug="false">
<!--Console appender-->
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %p %m%n"/>
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="stdout"/>
</root>
</log4j:configuration>
<log4j:configuration debug =” false”>
は1つのプロパティ –
debug
を持つ設定全体の開始タグです。 Log4jデバッグ情報をログに追加するかどうかを決定します。
5.2. 使用法
Log4jのライブラリと設定を追加した後は、コードにloggerを使用できます。簡単な例を見てみましょう。
import org.apache.log4j.Logger;
public class Log4jExample {
private static Logger logger = Logger.getLogger(Log4jExample.class);
public static void main(String[]args) {
logger.debug("Debug log message");
logger.info("Info log message");
logger.error("Error log message");
}
}
6. 結論
この記事では、Log4j、Log4j2、Logbackなど、さまざまなロギングフレームワークを使用する方法の非常に簡単な例を示します。それは言及されたフレームワークすべてのための簡単な設定例をカバーします。
記事に付随する例が見つかります
https://github.com/eugenp/tutorials/tree/master/logging-modules/log4j
[over
GitHubで。