Javaロギングの概要

1概要

2ロギングを有効にする

この記事で説明したすべてのロギングフレームワークは、ロガー、アペンダ、およびレイアウトの概念を共有しています。プロジェクト内でロギングを有効にするには、3つの一般的な手順に従います。

  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で。