Log4j-quick-guide

提供:Dev Guides
移動先:案内検索

log4j-概要

log4jは、Javaで記述された信頼性が高く、高速で柔軟なロギングフレームワーク(API)であり、Apacheソフトウェアライセンスの下で配布されます。

log4jは、C、C ++、C#、Perl、Python、Ruby、およびEiffel言語に移植されています。

log4jは、実行時に外部構成ファイルを使用して高度に構成できます。 優先度のレベルでロギングプロセスを表示し、データベース、ファイル、コンソール、UNIX Syslogなどのさまざまな宛先にロギング情報を送信するメカニズムを提供します。

log4jには3つの主要なコンポーネントがあります。

  • ロガー:ロギング情報をキャプチャします。
  • appenders :さまざまな優先送信先にログ情報を公開します。
  • layouts :ロギング情報をさまざまなスタイルでフォーマットします。

log4jの歴史

  • 1996年の初めに、E.UのトレースAPIとして開始されました。 SEMPER(ヨーロッパ向けのSecure Electronic Marketplace)プロジェクト。
  • 数え切れないほどの機能強化といくつかの化身の後、最初のAPIはJavaの一般的なロギングパッケージであるlog4jに進化しました。
  • このパッケージは、オープンソースイニシアティブによって認定された本格的なオープンソースライセンスであるApacheソフトウェアライセンスの下で配布されます。
  • 完全なソースコード、クラスファイル、ドキュメントを含む最新のlog4jバージョンは、http://logging.apache.org/log4j/にあります。

log4jの機能

  • スレッドセーフです。
  • 速度が最適化されています。
  • 名前付きロガー階層に基づいています。
  • ロガーごとに複数の出力アペンダーをサポートします。
  • 国際化をサポートします。
  • 事前に定義された一連の施設に限定されません。
  • ロギング動作は、構成ファイルを使用して実行時に設定できます。
  • Javaの例外を最初から処理するように設計されています。
  • 複数、つまりALL、TRACE、DEBUG、INFO、WARN、ERROR、FATALのレベルを使用します。
  • ログ出力の形式は、_Layout_クラスを拡張することで簡単に変更できます。
  • ログ出力のターゲットと書き込み戦略は、Appenderインターフェイスの実装によって変更できます。
  • フェールストップです。 ただし、配信を確実に行うように努めていますが、log4jは各ログステートメントが宛先に配信されることを保証しません。

ロギングの長所と短所

ロギングは、ソフトウェア開発の重要なコンポーネントです。 適切に作成されたロギングコードは、迅速なデバッグ、簡単なメンテナンス、およびアプリケーションの実行時情報の構造化されたストレージを提供します。

ロギングには欠点もあります。 アプリケーションの速度が低下する可能性があります。 冗長すぎると、スクロール失明を引き起こす可能性があります。 これらの懸念を軽減するために、log4jは信頼性、高速性、拡張性を備えた設計になっています。

ロギングがアプリケーションの主な焦点になることはめったにないため、log4j APIは理解しやすく使いやすいように努めています。

log4j-インストール

log4j APIパッケージは、オープンソースイニシアチブによって認定された本格的なオープンソースライセンスであるApacheソフトウェアライセンスの下で配布されます。

完全なソースコード、クラスファイル、ドキュメントを含む最新のlog4jバージョンは、http://logging.apache.org/log4j/にあります。

システムにlog4jをインストールするには、指定されたURLからapache-log4j-x.x.x.tar.gzをダウンロードし、以下の手順に従います。

ステップ1

次のように、ダウンロードしたファイルを /usr/local/ ディレクトリに解凍して解凍します。

$ gunzip apache-log4j-1.2.15.tar.gz
$ tar -xvf apache-log4j-1.2.15.tar
apache-log4j-1.2.15/tests/input/
apache-log4j-1.2.15/tests/input/xml/
apache-log4j-1.2.15/tests/src/
apache-log4j-1.2.15/tests/src/java/
apache-log4j-1.2.15/tests/src/java/org/
.......................................

展開中に、次のようにapache-log4j-x.x.xという名前のディレクトリ階層が作成されます。

-rw-r--r--  1 root root   3565 2007-08-25 00:09 BUILD-INFO.txt
-rw-r--r--  1 root root   2607 2007-08-25 00:09 build.properties.sample
-rw-r--r--  1 root root  32619 2007-08-25 00:09 build.xml
drwxr-xr-x 14 root root   4096 2010-02-04 14:09 contribs
drwxr-xr-x  5 root root   4096 2010-02-04 14:09 examples
-rw-r--r--  1 root root   2752 2007-08-25 00:09 INSTALL
-rw-r--r--  1 root root   4787 2007-08-25 00:09 KEYS
-rw-r--r--  1 root root  11366 2007-08-25 00:09 LICENSE
-rw-r--r--  1 root root 391834 2007-08-25 00:29 log4j-1.2.15.jar
-rw-r--r--  1 root root    160 2007-08-25 00:09 NOTICE
-rwxr-xr-x  1 root root  10240 2007-08-25 00:27 NTEventLogAppender.dll
-rw-r--r--  1 root root  17780 2007-08-25 00:09 pom.xml
drwxr-xr-x  7 root root   4096 2007-08-25 00:13 site
drwxr-xr-x  8 root root   4096 2010-02-04 14:08 src
drwxr-xr-x  6 root root   4096 2010-02-04 14:09 tests

ステップ2

この手順はオプションであり、log4jフレームワークから使用する機能によって異なります。 マシンに次のパッケージがすでにインストールされている場合は問題ありません。それ以外の場合は、log4jを機能させるためにそれらをインストールする必要があります。

  • * JavaMail API:* log4jの電子メールベースのログ機能では、Java Mail API(mail.jar)をhttps://glassfish.dev.java.net/javaee5/mail/[glassfish。からマシンにインストールする必要があります。 dev]。
  • * JavaBeans Activation Framework:* Java Mail APIでは、JavaBeans Activation Framework(activation.jar)をhttp://java.sun.com/products/javabeans/jaf/index.jspからマシンにインストールする必要もあります。
  • * Java Message Service:* log4jのJMS互換機能では、JMSとJava NamingおよびDirectory Interface JNDIの両方をhttp://java.sun.com/products/jmsからマシンにインストールする必要があります。
  • * XMLパーサー:* log4jを使用するには、JAXP互換のXMLパーサーが必要です。 [[1]]

ステップ3

ここで、 CLASSPATH および PATH 変数を適切に設定する必要があります。 ここでは、log4j.x.x.x.jarファイルに対してのみ設定します。

$ pwd
/usr/local/apache-log4j-1.2.15
$ export CLASSPATH=$CLASSPATH:/usr/local/apache-log4j-1.2.15/log4j-1.2.15.jar
$ export PATH=$PATH:/usr/local/apache-log4j-1.2.15/

log4j-アーキテクチャ

log4j APIは、各層が異なるタスクを実行する異なるオブジェクトを提供する階層化アーキテクチャに従います。 この階層化されたアーキテクチャにより、設計は柔軟になり、将来拡張しやすくなります。

log4jフレームワークで使用できるオブジェクトには2つのタイプがあります。

  • *コアオブジェクト:*これらはフレームワークの必須オブジェクトです。 フレームワークを使用するために必要です。
  • *サポートオブジェクト:*これらはフレームワークのオプションのオブジェクトです。 追加の重要なタスクを実行するコアオブジェクトをサポートします。

コアオブジェクト

コアオブジェクトには、次のタイプのオブジェクトが含まれます-

ロガーオブジェクト

最上位層はLoggerオブジェクトを提供するLoggerです。 Loggerオブジェクトは、ロギング情報をキャプチャする役割を果たし、ネームスペース階層に保存されます。

レイアウトオブジェクト

レイアウトレイヤーは、さまざまなスタイルでログ情報をフォーマットするために使用されるオブジェクトを提供します。 ログ情報を公開する前に、アペンダーオブジェクトをサポートします。

レイアウトオブジェクトは、ログ情報を人間が読み取って再利用できる方法で公開する際に重要な役割を果たします。

アペンダーオブジェクト

これは、Appenderオブジェクトを提供する下位レベルのレイヤーです。 Appenderオブジェクトは、データベース、ファイル、コンソール、UNIX Syslogなどのさまざまな優先先にロギング情報を公開する役割を果たします。

次の仮想図は、log4Jフレームワークのコンポーネントを示しています。

log4jアーキテクチャ

サポートオブジェクト

log4jフレームワークには、ロギングフレームワークで重要な役割を果たす他の重要なオブジェクトがあります。

レベルオブジェクト

Levelオブジェクトは、ロギング情報の粒度と優先度を定義します。 APIには、OFF、DEBUG、INFO、ERROR、WARN、FATAL、ALLの7つのレベルのロギングが定義されています。

フィルターオブジェクト

Filterオブジェクトを使用して、ログ情報を分析し、その情報をログに記録するかどうかをさらに決定します。

Appenderオブジェクトには、複数のFilterオブジェクトを関連付けることができます。 ログ情報が特定のAppenderオブジェクトに渡される場合、そのAppenderに関連付けられているすべてのFilterオブジェクトは、ログ情報を承認してから、接続先に公開する必要があります。

ObjectRenderer

ObjectRendererオブジェクトは、ロギングフレームワークに渡されるさまざまなオブジェクトのストリング表現を提供することに特化しています。 このオブジェクトは、最終的なログ情報を準備するためにレイアウトオブジェクトによって使用されます。

LogManager

LogManagerオブジェクトは、ロギングフレームワークを管理します。 システム全体の構成ファイルまたは構成クラスから初期構成パラメーターを読み取る必要があります。

log4j-構成

前の章では、log4jのコアコンポーネントについて説明しました。 この章では、構成ファイルを使用してコアコンポーネントを構成する方法について説明します。 log4jの構成には、レベルの割り当て、アペンダーの定義、および構成ファイル内のレイアウトオブジェクトの指定が含まれます。

*log4j.properties* ファイルは、キーと値のペアでプロパティを保持するlog4j構成ファイルです。 デフォルトでは、LogManagerは *CLASSPATH* で *log4j.properties* という名前のファイルを探します。
  • ルートロガーのレベルは DEBUG として定義されています。 DEBUG は、Xという名前のアペンダーをアタッチします。
  • Xという名前のアペンダーを有効なアペンダーに設定します。
  • アペンダーXのレイアウトを設定します。

log4j.propertiesの構文:

アペンダーXの_log4j.properties_ファイルの構文は次のとおりです。

# Define the root logger with appender X
log4j.rootLogger = DEBUG, X

# Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender

# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n

log4j.propertiesの例

上記の構文を使用して、 log4j.properties ファイルで以下を定義します。

  • ルートロガーのレベルは DEBUGFILE という名前の DEBUG アペンダーとして定義されます。
  • アペンダー FILEorg.apache.log4j.FileAppender として定義されます。 log ディレクトリにある log.out という名前のファイルに書き込みます。
  • 定義されているレイアウトパターンは_%m%n_です。これは、印刷されたログメッセージの後に改行文字が続くことを意味します。
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

log4jは、$ \ {variableName}などのUNIXスタイルの変数置換をサポートしていることに注意することが重要です。

デバッグレベル

両方のアペンダーでDEBUGを使用しました。 可能なオプションはすべて次のとおりです。

  • トレース
  • デバッグ
  • INFO
  • WARN
  • エラー
  • 致命的
  • ALL

これらのレベルについては、このチュートリアルの後半で説明します。

アペンダー

Apache log4jは、コンソール、ファイル、ソケット、NTイベントログなどのさまざまな宛先へのロギングメッセージの印刷を主に担当するAppenderオブジェクトを提供します。

各Appenderオブジェクトには異なるプロパティが関連付けられており、これらのプロパティはそのオブジェクトの動作を示します。

Property Description
layout Appender uses the Layout objects and the conversion pattern associated with them to format the logging information.
target The target may be a console, a file, or another item depending on the appender.
level The level is required to control the filtration of the log messages.
threshold Appender can have a threshold level associated with it independent of the logger level. The Appender ignores any logging messages that have a level lower than the threshold level.
filter The Filter objects can analyze logging information beyond level matching and decide whether logging requests should be handled by a particular Appender or ignored.

次の方法で構成ファイルに次の設定を含めることにより、ロガーにAppenderオブジェクトを追加できます。

log4j.logger.[logger-name]=level, appender1,appender..n

次のように、同じ構成をXML形式で記述できます。

<logger name="com.apress.logging.log4j" additivity="false">
   <appender-ref ref="appender1"/>
   <appender-ref ref="appender2"/>
</logger>

プログラム内にAppenderオブジェクトを追加する場合は、次の方法を使用できます。

public void addAppender(Appender appender);

addAppender()メソッドは、ロガーオブジェクトにアペンダーを追加します。 設定例が示すように、多くのAppenderオブジェクトをカンマ区切りリストのロガーに追加し、それぞれがロギング情報を別々の宛先に印刷することが可能です。

上記の例では、1つのアペンダー_FileAppender_のみを使用しました。 可能なすべてのアペンダーオプションは次のとおりです。

  • AppenderSkeleton
  • AsyncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPアペンダー
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender

FileAppenderはlink:/log4j/log4j_logging_files [Logging in Files]でカバーし、JDBC Appenderはlink:/log4j/log4j_logging_database [Logging in Database]でカバーします。

レイアウト

アペンダーでPatternLayoutを使用しました。 可能なオプションはすべて次のとおりです。

  • DateLayout
  • HTMLLayout
  • パターンレイアウト
  • SimpleLayout
  • XMLLayout

HTMLLayoutおよびXMLLayoutを使用すると、HTMLおよびXML形式でログを生成できます。

レイアウトのフォーマット

次の章でログメッセージのフォーマット方法を学習します:link:/log4j/log4j_log_formatting [ログのフォーマット]。

log4j-サンプルプログラム

構成ファイルの作成方法を見てきました。 この章では、デバッグメッセージを生成して簡単なテキストファイルに記録する方法について説明します。

以下は、この例のために作成された簡単な構成ファイルです。 もう一度修正しましょう。

  • ルートロガーのレベルは DEBUG として定義され、 FILE という名前のアペンダーをそれに添付します。

  • アペンダ FILEorg.apache.log4j.FileAppender として定義され、 log ディレクトリにある log.out という名前のファイルに書き込みます。

  • 定義されたレイアウトパターンは%m%nです。これは、印刷されたログメッセージの後に改行文字が続くことを意味します。

    *log4j.properties* ファイルの内容は次のとおりです-
# Define the root logger with appender file
log =/usr/home/log4j
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Javaプログラムでのlog4jの使用

次のJavaクラスは、Javaアプリケーションのlog4jロギングライブラリを初期化してから使用する非常に単純な例です。

import org.apache.log4j.Logger;

import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class log4jExample{

  /*Get actual class name to be printed on*/
   static Logger log = Logger.getLogger(log4jExample.class.getName());

   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Hello this is a debug message");
      log.info("Hello this is an info message");
   }
}

コンパイルして実行

上記のプログラムをコンパイルして実行する手順は次のとおりです。 コンパイルと実行に進む前に、 PATHCLASSPATH が適切に設定されていることを確認してください。

すべてのライブラリが CLASSPATH で利用可能であり、 log4j.properties ファイルが PATH で利用可能である必要があります。 以下の手順に従ってください-

  • 上記のようにlog4j.propertiesを作成します。

  • 上記のようにlog4jExample.javaを作成してコンパイルします。

  • log4jExampleバイナリを実行して、プログラムを実行します。

    */usr/home/log4j/log.out* ファイル内で次の結果が得られます-
Hello this is a debug message
Hello this is an info message

log4j-ロギングメソッド

Loggerクラスは、ロギングアクティビティを処理するためのさまざまなメソッドを提供します。 Loggerクラスでは、新しいLoggerインスタンスをインスタンス化することはできませんが、Loggerオブジェクトを取得するための2つの静的メソッドを提供します-

  • *パブリックスタティックロガーgetRootLogger(); *
  • public static Logger getLogger(String name);

2つのメソッドの最初は、アプリケーションインスタンスのルートロガーを返し、名前はありません。

他の名前付きLoggerオブジェクトインスタンスは、ロガーの名前を渡すことにより、2番目のメソッドを介して取得されます。 ロガーの名前には、渡すことができる任意の文字列を使用できます。通常は、前の章で使用したクラスまたはパッケージ名であり、以下で説明します-

static Logger log = Logger.getLogger(log4jExample.class.getName());

ロギング方法

名前付きロガーのインスタンスを取得したら、ロガーのいくつかのメソッドを使用してメッセージを記録できます。 Loggerクラスには、ロギング情報を印刷するための次のメソッドがあります。

# Methods and Description
1

public void debug(Object message)

Level Level.DEBUGのメッセージを出力します。

2

public void error(Object message)

Level Level.ERRORのメッセージを出力します。

3

public void fatal(Object message)

Level Level.FATALのメッセージを出力します。

4

public void info(Object message)

Level Level.INFOのメッセージを出力します。

5

public void warn(Object message)

Level.WARNレベルのメッセージを出力します。

6

public void trace(Object message)

Level Level.TRACEレベルのメッセージを出力します。

すべてのレベルは org.apache.log4j.Level クラスで定義されており、上記のメソッドは次のように呼び出すことができます-

import org.apache.log4j.Logger;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);

   public static void main(String[] args) {

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}
*LogClass* プログラムをコンパイルして実行すると、次の結果が生成されます-
Debug Message!
Info Message!
Warn Message!
Error Message!
Fatal Message!

すべてのデバッグメッセージは、レベルと組み合わせて使用​​するとより意味があります。 次の章でレベルについて説明します。その後、これらのメソッドをさまざまなレベルのデバッグと組み合わせて使用​​する方法を十分に理解できます。

log4j-ロギングレベル

*org.apache.log4j.Level* レベル。 *Level* クラスをサブクラス化して、カスタムレベルを定義することもできます。
Level Description
ALL All levels including custom levels.
DEBUG Designates fine-grained informational events that are most useful to debug an application.
INFO Designates informational messages that highlight the progress of the application at coarse-grained level.
WARN Designates potentially harmful situations.
ERROR Designates error events that might still allow the application to continue running.
FATAL Designates very severe error events that will presumably lead the application to abort.
OFF The highest possible rank and is intended to turn off logging.
TRACE Designates finer-grained informational events than the DEBUG.

レベルはどのように機能しますか?

レベルが q のロガー内のレベルが p のログ要求は、p> = qの場合、*有効*です。 このルールは、log4jの中心にあります。 レベルが順序付けられていることを前提としています。 標準レベルでは、ALL <DEBUG <INFO <WARN <ERROR <FATAL <OFFです。

次の例は、すべてのDEBUGおよびINFOメッセージをフィルタリングする方法を示しています。 このプログラムは、ロガーメソッドsetLevel(Level.X)を使用して、必要なログレベルを設定します。

この例では、DebugとInfoを除くすべてのメッセージを出力します。

import org.apache.log4j.*;

public class LogClass {
   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);

   public static void main(String[] args) {
      log.setLevel(Level.WARN);

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}
*LogClass* プログラムをコンパイルして実行すると、次の結果が生成されます-
Warn Message!
Error Message!
Fatal Message!

構成ファイルを使用したレベルの設定

log4jには、デバッグレベルを変更するときにソースコードを変更しないようにする設定ファイルベースのレベル設定が用意されています。

以下は、上記の例で* log.setLevel(Level.WARN)*メソッドを使用して実行したのと同じタスクを実行する構成ファイルの例です。

# Define the root logger with appender file
log =/usr/home/log4j
log4j.rootLogger = WARN, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

次のプログラムを使用してみましょう-

import org.apache.log4j.*;

public class LogClass {

   private static org.apache.log4j.Logger log = Logger.getLogger(LogClass.class);

   public static void main(String[] args) {

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

上記のプログラムをコンパイルして実行すると、 /usr/home/log4j/log.out ファイルに次の結果が表示されます-

Warn Message!
Error Message!
Fatal Message!

log4j-ログのフォーマット

Apache log4jはさまざまな Layout オブジェクトを提供し、各オブジェクトはさまざまなレイアウトに従ってロギングデータをフォーマットできます。 また、アプリケーション固有の方法でロギングデータをフォーマットするレイアウトオブジェクトを作成することもできます。

すべてのレイアウトオブジェクトは、 Appender オブジェクトから LoggingEvent オブジェクトを受け取ります。 次に、レイアウトオブジェクトはLoggingEventからメッセージ引数を取得し、適切なObjectRendererを適用してメッセージの文字列表現を取得します。

レイアウトの種類

階層の最上位クラスは、抽象クラス org.apache.log4j.Layout です。 これは、log4j APIの他のすべてのレイアウトクラスの基本クラスです。

Layoutクラスはアプリケーション内で抽象として定義されています。このクラスを直接使用することはありません。代わりに、次のようなサブクラスを使用します。

  • DateLayout
  • リンク:/log4j/log4j_htmllayout [HTMLLayout]
  • リンク:/log4j/log4j_patternlayout [PatternLayout。]
  • SimpleLayout *XMLLayout

レイアウト方法

このクラスは、他のすべてのレイアウトオブジェクトに共通するすべての操作のスケルトン実装を提供し、2つの抽象メソッドを宣言します。

Sr.No. Methods & Description
1
  • public abstract boolean ignoresThrowable()*

ロギング情報が、ロギングイベントの一部として渡されたjava.lang.Throwableオブジェクトを処理するかどうかを示します。 LayoutオブジェクトがThrowableオブジェクトを処理する場合、Layoutオブジェクトはそれを無視せず、falseを返します。

2

public abstract String format(LoggingEvent event)

個々のレイアウトサブクラスは、レイアウト固有の書式設定のためにこのメソッドを実装します。

これらの抽象メソッドとは別に、Layoutクラスは以下にリストしたメソッドの具体的な実装を提供します。

Sr.No. Methods & Description
1

public String getContentType()

Layoutオブジェクトが使用するコンテンツタイプを返します。 基本クラスは、デフォルトのコンテンツタイプとしてtext/plainを返します。

2

public String getFooter()

ロギングメッセージのフッター情報を指定します。

3

public String getHeader()

ロギングメッセージのヘッダー情報を指定します。

各サブクラスは、これらのメソッドの具体的な実装をオーバーライドすることにより、クラス固有の情報を返すことができます。

log4j-ファイルのログイン

ログ情報をファイルに書き込むには、 org.apache.log4j.FileAppender を使用する必要があります。

FileAppenderの構成

FileAppenderには、次の構成可能なパラメーターがあります。

Property Description
immediateFlush This flag is by default set to true, which means the output stream to the file being flushed with each append operation.
encoding It is possible to use any character-encoding. By default, it is the platform-specific encoding scheme.
threshold The threshold level for this appender.
Filename The name of the log file.
fileAppend This is by default set to true, which means the logging information being appended to the end of the same file.
bufferedIO This flag indicates whether we need buffered writing enabled. By default, it is set to false.
bufferSize If buffered I/O is enabled, it indicates the buffer size. By default, it is set to 8kb.

以下は、FileAppenderのサンプル構成ファイル log4j.properties です-

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, overwrite
log4j.appender.FILE.Append=false

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

上記の log4j.properties ファイルと同等のXML構成ファイルが必要な場合は、次の内容があります。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="FILE" class="org.apache.log4j.FileAppender">

   <param name="file" value="${log}/log.out"/>
   <param name="immediateFlush" value="true"/>
   <param name="threshold" value="debug"/>
   <param name="append" value="false"/>

   <layout class="org.apache.log4j.PatternLayout">
      <param name="conversionPattern" value="%m%n"/>
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="FILE"/>
</logger>

</log4j:configuration>

上記の設定でhttp://www.finddevguides.com/log4j/log4j_sample_program[log4j-Sample Program]を試すことができます。

複数のファイルにログインする

たとえば、ファイルサイズが特定のしきい値に達した場合など、特定の理由でログメッセージを複数のファイルに書き込むことができます。

ログ情報を複数のファイルに書き込むには、 FileAppender クラスを拡張し、すべてのプロパティを継承する org.apache.log4j.RollingFileAppender クラスを使用する必要があります。

FileAppenderについて上記で説明したものに加えて、次の構成可能なパラメーターがあります-

Property Description
maxFileSize This is the critical size of the file above which the file will be rolled. Default value is 10 MB.
maxBackupIndex This property denotes the number of backup files to be created. Default value is 1.

以下は、RollingFileAppenderのサンプル構成ファイル log4j.properties です。

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the maximum file size before rollover
log4j.appender.FILE.MaxFileSize=5MB

# Set the the backup index
log4j.appender.FILE.MaxBackupIndex=2

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

XML構成ファイルが必要な場合は、最初のセクションで説明したものと同じものを生成し、 RollingFileAppender に関連する追加パラメーターのみを追加できます。

この構成例は、各ログファイルの最大許容サイズが5 MBであることを示しています。 最大サイズを超えると、新しいログファイルが作成されます。 maxBackupIndex は2として定義されているため、2番目のログファイルが最大サイズに達すると、最初のログファイルが消去され、その後すべてのログ情報が最初のログファイルにロールバックされます。

上記の設定でhttp://www.finddevguides.com/log4j/log4j_sample_program[log4j-Sample Program]を試すことができます。

毎日のログファイル生成

ロギング情報のクリーンな記録を保持するために、ログファイルを毎日生成する必要がある場合があります。

ロギング情報を毎日ファイルに書き込むには、 FileAppender クラスを拡張し、そのすべてのプロパティを継承する org.apache.log4j.DailyRollingFileAppender クラスを使用する必要があります。

FileAppenderについて前述したものに加えて、重要な構成可能なパラメーターは1つだけです。

Property Description
DatePattern This indicates when to roll over the file and the naming convention to be followed. By default, roll over is performed at midnight each day.

DatePatternは、次のパターンのいずれかを使用してロールオーバースケジュールを制御します。

DatePattern Description
'.' yyyy-MM Roll over at the end of each month and at the beginning of the next month.
'.' yyyy-MM-dd Roll over at midnight each day. This is the default value.
'.' yyyy-MM-dd-a Roll over at midday and midnight of each day.
'.' yyyy-MM-dd-HH Roll over at the top of every hour.
'.' yyyy-MM-dd-HH-mm Roll over every minute.
'.' yyyy-ww Roll over on the first day of each week depending upon the locale.

以下は、毎日正午と真夜中にロールオーバーするログファイルを生成するサンプル構成ファイル log4j.properties です。

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=${log}/log.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the DatePattern
log4j.appender.FILE.DatePattern='.' yyyy-MM-dd-a

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

XML構成ファイルが必要な場合は、最初のセクションで説明したものと同じものを生成し、 DailyRollingFileAppender に関連する追加パラメーターのみを追加できます。

上記の設定でhttp://www.finddevguides.com/log4j/log4j_sample_program[log4j-Sample Program]を試すことができます。

log4j-データベースへのログイン

log4j APIは org.apache.log4j.jdbc.JDBCAppender オブジェクトを提供します。これにより、指定されたデータベースにロギング情報を配置できます。

JDBCAppenderの構成

Property Description
bufferSize Sets the buffer size. Default size is 1.
driver Sets the driver class to the specified string. If no driver class is specified, it defaults to sun.jdbc.odbc.JdbcOdbcDriver.
layout Sets the layout to be used. Default layout is org.apache.log4j.PatternLayout.
password Sets the database password.
sql Specifies the SQL statement to be executed every time a logging event occurs. This could be INSERT, UPDATE, or DELETE.
URL Sets the JDBC URL.
user Sets the database user name.

ログテーブルの構成

JDBCベースのロギングの使用を開始する前に、すべてのログ情報を保持するテーブルを作成する必要があります。 LOGSテーブルを作成するためのSQLステートメントは次のとおりです-

CREATE TABLE LOGS
   (USER_ID VARCHAR(20)    NOT NULL,
    DATED   DATE           NOT NULL,
    LOGGER  VARCHAR(50)    NOT NULL,
    LEVEL   VARCHAR(10)    NOT NULL,
    MESSAGE VARCHAR(1000)  NOT NULL
   );

サンプル構成ファイル

以下は、JDBCAppender用のサンプル構成ファイル log4j.properties であり、LOGSテーブルにメッセージを記録するために使用されます。

# Define the root logger with appender file
log4j.rootLogger = DEBUG, DB

# Define the DB appender
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender

# Set JDBC URL
log4j.appender.DB.URL=jdbc:mysql://localhost/DBNAME

# Set Database Driver
log4j.appender.DB.driver=com.mysql.jdbc.Driver

# Set database user name and password
log4j.appender.DB.user=user_name
log4j.appender.DB.password=password

# Set the SQL statement to be executed.
log4j.appender.DB.sql=INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')

# Define the layout for file appender
log4j.appender.DB.layout=org.apache.log4j.PatternLayout

MySQLデータベースの場合、LOGSテーブルを作成した実際のDBNAME、ユーザーID、およびパスワードを使用する必要があります。 SQLステートメントは、テーブル名LOGSおよびテーブルに入力される値を使用してINSERTステートメントを実行します。

JDBCAppenderでは、レイアウトを明示的に定義する必要はありません。 代わりに、渡されるSQLステートメントはPatternLayoutを使用します。

上記の log4j.properties ファイルと同等のXML構成ファイルが必要な場合、ここに内容があります-

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

<appender name="DB" class="org.apache.log4j.jdbc.JDBCAppender">
   <param name="url" value="jdbc:mysql://localhost/DBNAME"/>
   <param name="driver" value="com.mysql.jdbc.Driver"/>
   <param name="user" value="user_id"/>
   <param name="password" value="password"/>
   <param name="sql" value="INSERT INTO LOGS VALUES('%x','%d','%C','%p','%m')"/>

   <layout class="org.apache.log4j.PatternLayout">
   </layout>
</appender>

<logger name="log4j.rootLogger" additivity="false">
   <level value="DEBUG"/>
   <appender-ref ref="DB"/>
</logger>

</log4j:configuration>

サンプルプログラム

次のJavaクラスは、JavaアプリケーションのLog4Jロギングライブラリを初期化してから使用する非常に単純な例です。

import org.apache.log4j.Logger;
import java.sql.*;
import java.io.*;
import java.util.*;

public class log4jExample{
  /*Get actual class name to be printed on*/
   static Logger log = Logger.getLogger(log4jExample.class.getName());

   public static void main(String[] args)throws IOException,SQLException{
      log.debug("Debug");
      log.info("Info");
   }
}

コンパイルして実行

上記のプログラムをコンパイルして実行する手順は次のとおりです。 コンパイルと実行に進む前に、 PATHCLASSPATH が適切に設定されていることを確認してください。

すべてのライブラリが CLASSPATH で使用可能であり、_log4j.properties_ファイルがPATHで使用可能である必要があります。 指定された手順に従ってください-

  • 上記のようにlog4j.propertiesを作成します。
  • 上記のようにlog4jExample.javaを作成してコンパイルします。 *log4jExampleバイナリを実行して、プログラムを実行します。

DBNAMEデータベース内のLOGSテーブルを確認すると、次のエントリが見つかります-

mysql >  select* from LOGS;
+---------+------------+--------------+-------+---------+
| USER_ID | DATED      | LOGGER       | LEVEL | MESSAGE |
+---------+------------+--------------+-------+---------+
|         | 2010-05-13 | log4jExample | DEBUG | Debug   |
|         | 2010-05-13 | log4jExample | INFO  | Info    |
+---------+------------+--------------+-------+---------+
2 rows in set (0.00 sec)

-ここでxは、ロギングイベントを生成したスレッドに関連付けられたネストされた診断コンテキスト(NDC)を出力するために使用されます。 NDCを使用して、複数のクライアントを処理するサーバー側コンポーネントのクライアントを区別します。 詳細については、Log4Jマニュアルを参照してください。 Log4j-questions-answers