log4j-クイックガイド
log4jは、Javaで記述された信頼性が高く高速で柔軟なロギングフレームワーク(API)であり、Apacheソフトウェアライセンスの下で配布されます。
log4jは、C、C ++、C#、Perl、Python、Ruby、およびEiffel言語に移植されています。
log4jは、実行時に外部構成ファイルを介して高度に構成可能です。優先度のレベルの観点からロギングプロセスを表示し、データベース、ファイル、コンソール、UNIXSyslogなどのさまざまな宛先にロギング情報を送信するメカニズムを提供します。
log4jには3つの主要なコンポーネントがあります。
loggers:ログ情報のキャプチャを担当します。
appenders:ログ情報をさまざまな優先宛先に公開する責任があります。
layouts:ログ情報をさまざまなスタイルでフォーマットする責任があります。
log4jの歴史
EU SEMPER(Secure Electronic Marketplace for Europe)プロジェクトのトレースAPIとして1996年の初めに開始されました。
数え切れないほどの機能強化といくつかの化身の後、最初のAPIは進化して、Javaの人気のあるロギングパッケージであるlog4jになりました。
このパッケージは、オープンソースイニシアチブによって認定された本格的なオープンソースライセンスであるApache SoftwareLicenseの下で配布されます。
完全なソースコード、クラスファイル、およびドキュメントを含む最新のlog4jバージョンは、次の場所にあります。 http://logging.apache.org/log4j/。
log4jの機能
スレッドセーフです。
速度が最適化されています。
これは、名前付きロガー階層に基づいています。
ロガーごとに複数の出力アペンダーをサポートします。
国際化をサポートします。
事前定義された一連の施設に限定されません。
ロギング動作は、構成ファイルを使用して実行時に設定できます。
これは、最初からJava例外を処理するように設計されています。
複数のレベル、つまりALL、TRACE、DEBUG、INFO、WARN、ERROR、およびFATALを使用します。
ログ出力の形式は、Layoutクラスを拡張することで簡単に変更できます。
ログ出力のターゲットと書き込み戦略は、Appenderインターフェイスの実装によって変更できます。
フェイルストップです。ただし、確実に配信されるように努めていますが、log4jは各ログステートメントが宛先に配信されることを保証していません。
ロギングの長所と短所
ロギングは、ソフトウェア開発の重要なコンポーネントです。適切に記述されたロギングコードは、アプリケーションのランタイム情報の迅速なデバッグ、簡単なメンテナンス、および構造化ストレージを提供します。
ロギングには欠点もあります。アプリケーションの速度が低下する可能性があります。冗長すぎると、スクロール失明を引き起こす可能性があります。これらの懸念を軽減するために、log4jは信頼性が高く、高速で拡張性があるように設計されています。
ロギングがアプリケーションの主な焦点になることはめったにないため、log4jAPIは理解と使用が簡単になるように努めています。
log4j APIパッケージは、オープンソースイニシアチブによって認定された本格的なオープンソースライセンスであるApache SoftwareLicenseの下で配布されます。
フルソースコード、クラスファイル、ドキュメントを含む最新のlog4jバージョンは、次のURLにあります。 http://logging.apache.org/log4j/。
システムにlog4jをインストールするには、指定されたURLからapache-log4j-xxxtar.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-xxxという名前のディレクトリ階層が作成されます。
-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メールAPI(mail.jarのは)から、あなたのマシンにインストールされている必要があり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ネーミングおよびディレクトリインターフェイスJNDIの両方をマシンにインストールする必要があります。 http://java.sun.com/products/jms。
XML Parser:log4jを使用するには、JAXP互換のXMLパーサーが必要です。Xerces.jarがからマシンにインストールされていることを確認してくださいhttp://xerces.apache.org/xerces-j/install.html。
ステップ3
次に、を設定する必要があります CLASSPATH そして PATH適切に変数。ここでは、log4j.xxxjarファイルに対してのみ設定します。
$ 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 APIは、各レイヤーがさまざまなタスクを実行するためのさまざまなオブジェクトを提供する階層化アーキテクチャに従います。この階層化アーキテクチャにより、設計は柔軟になり、将来的に簡単に拡張できます。
log4jフレームワークで使用できるオブジェクトには2つのタイプがあります。
Core Objects:これらはフレームワークの必須オブジェクトです。フレームワークを使用する必要があります。
Support Objects:これらはフレームワークのオプションのオブジェクトです。これらは、追加の重要なタスクを実行するためのコアオブジェクトをサポートします。
コアオブジェクト
コアオブジェクトには、次のタイプのオブジェクトが含まれます。
ロガーオブジェクト
最上位層は、Loggerオブジェクトを提供するLoggerです。Loggerオブジェクトは、ログ情報のキャプチャを担当し、名前空間階層に格納されます。
レイアウトオブジェクト
レイアウトレイヤーは、ログ情報をさまざまなスタイルでフォーマットするために使用されるオブジェクトを提供します。ロギング情報を公開する前に、アペンダーオブジェクトをサポートします。
レイアウトオブジェクトは、人間が判読可能で再利用可能な方法でログ情報を公開する上で重要な役割を果たします。
アペンダーオブジェクト
これは、Appenderオブジェクトを提供する下位レベルのレイヤーです。Appenderオブジェクトは、データベース、ファイル、コンソール、UNIXSyslogなどのさまざまな優先宛先にログ情報を公開する役割を果たします。
次の仮想図は、log4Jフレームワークのコンポーネントを示しています。
サポートオブジェクト
log4jフレームワークには、ロギングフレームワークで重要な役割を果たす他の重要なオブジェクトがあります。
レベルオブジェクト
Levelオブジェクトは、ログ情報の粒度と優先度を定義します。API内で定義されているロギングには、OFF、DEBUG、INFO、ERROR、WARN、FATAL、およびALLの7つのレベルがあります。
フィルタオブジェクト
Filterオブジェクトは、ログ情報を分析し、その情報をログに記録するかどうかをさらに決定するために使用されます。
Appenderオブジェクトには、複数のFilterオブジェクトを関連付けることができます。ロギング情報が特定のAppenderオブジェクトに渡される場合、そのAppenderに関連付けられているすべてのFilterオブジェクトは、添付された宛先に公開する前に、ロギング情報を承認する必要があります。
ObjectRenderer
ObjectRendererオブジェクトは、ロギングフレームワークに渡されるさまざまなオブジェクトの文字列表現を提供することに特化しています。このオブジェクトは、最終的なログ情報を準備するためにLayoutオブジェクトによって使用されます。
LogManager
LogManagerオブジェクトは、ロギングフレームワークを管理します。システム全体の構成ファイルまたは構成クラスから初期構成パラメーターを読み取る役割を果たします。
前の章では、log4jのコアコンポーネントについて説明しました。この章では、構成ファイルを使用してコアコンポーネントを構成する方法について説明します。log4jの構成には、レベルの割り当て、アペンダーの定義、および構成ファイルでのレイアウトオブジェクトの指定が含まれます。
log4j.propertiesのファイルには、キーと値のペアのプロパティを保持しますlog4jの設定ファイルです。デフォルトでは、LogManagerのは、名前のファイルを探しますlog4j.propertiesにCLASSPATH。
ルートロガーのレベルは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ファイルで以下を定義します。
ルートロガーのレベルはDEBUGとして定義され、DEBUGアペンダーはそれにFILEという名前を付けます。
アペンダーFILEは、org.apache.log4j.FileAppenderとして定義されています。にある「log.out」という名前のファイルに書き込みますlog ディレクトリ。
定義されたレイアウトパターンは%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を使用しました。可能なすべてのオプションは次のとおりです。
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- ALL
これらのレベルは、log4jのログレベルで説明されます。
アペンダー
Apache log4jは、コンソール、ファイル、ソケット、NTイベントログなどのさまざまな宛先へのログメッセージの印刷を主に担当するAppenderオブジェクトを提供します。
各Appenderオブジェクトには異なるプロパティが関連付けられており、これらのプロパティはそのオブジェクトの動作を示します。
プロパティ | 説明 |
---|---|
レイアウト | Appenderは、レイアウトオブジェクトとそれに関連付けられた変換パターンを使用して、ログ情報をフォーマットします。 |
目標 | ターゲットは、アペンダーに応じて、コンソール、ファイル、または別のアイテムになります。 |
レベル | このレベルは、ログメッセージのフィルタリングを制御するために必要です。 |
しきい値 | アペンダーは、ロガーレベルとは関係なく、しきい値レベルを関連付けることができます。アペンダーは、しきい値レベルよりも低いレベルのログメッセージを無視します。 |
フィルタ | Filterオブジェクトは、レベルマッチングを超えてロギング情報を分析し、ロギング要求を特定のアペンダーが処理するか無視するかを決定できます。 |
次のメソッドを使用して構成ファイルに次の設定を含めることにより、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()メソッドは、LoggerオブジェクトにAppenderを追加します。構成例が示すように、多くのAppenderオブジェクトをコンマ区切りのリストでロガーに追加し、それぞれがログ情報を別々の宛先に出力することができます。
上記の例では、1つのアペンダーFileAppenderのみを使用しました。可能なすべてのアペンダーオプションは次のとおりです。
- AppenderSkeleton
- AsyncAppender
- ConsoleAppender
- DailyRollingFileAppender
- ExternallyRolledFileAppender
- FileAppender
- JDBCAppender
- JMSAppender
- LF5Appender
- NTEventLogAppender
- NullAppender
- RollingFileAppender
- SMTPAppender
- SocketAppender
- SocketHubAppender
- SyslogAppender
- TelnetAppender
- WriterAppender
私たちは中にFileAppenderをカバーするファイルにログでカバーされるだろうとJDBCのAppenderデータベースにログ記録。
レイアウト
アペンダーでPatternLayoutを使用しました。可能なすべてのオプションは次のとおりです。
- DateLayout
- HTMLLayout
- PatternLayout
- SimpleLayout
- XMLLayout
HTMLLayoutとXMLLayoutを使用すると、HTMLおよびXML形式でログを生成することもできます。
レイアウトのフォーマット
ログメッセージのフォーマット方法については、「ログのフォーマット」の章で学習します。
構成ファイルを作成する方法を見てきました。この章では、デバッグメッセージを生成し、それらを単純なテキストファイルに記録する方法について説明します。
以下は、この例のために作成された簡単な構成ファイルです。もう一度修正しましょう:
ルートロガーのレベルはDEBUGとして定義され、FILEという名前のアペンダーをアタッチします。
アペンダーFILEはorg.apache.log4j.FileAppenderとして定義され、にある「log.out」という名前のファイルに書き込みます。 log ディレクトリ。
定義されたレイアウトパターンは%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");
}
}
コンパイルして実行する
上記のプログラムをコンパイルして実行する手順は次のとおりです。設定したことを確認してくださいPATH そして CLASSPATH コンパイルと実行に進む前に、適切に。
すべてのライブラリはで利用可能である必要があります 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
Loggerクラスは、ロギングアクティビティを処理するためのさまざまなメソッドを提供します。Loggerクラスでは、新しいLoggerインスタンスをインスタンス化することはできませんが、Loggerオブジェクトを取得するための2つの静的メソッドを提供します。
- public static Logger getRootLogger();
- public static Logger getLogger(String name);
2つのメソッドの最初のメソッドは、アプリケーションインスタンスのルートロガーを返しますが、名前はありません。
他の名前付きロガーオブジェクトインスタンスは、ロガーの名前を渡すことにより、2番目のメソッドを介して取得されます。ロガーの名前は、渡すことができる任意の文字列にすることができます。通常は、前の章で使用したクラス名またはパッケージ名であり、以下で説明します。
static Logger log = Logger.getLogger(log4jExample.class.getName());
ロギング方法
名前付きロガーのインスタンスを取得したら、ロガーのいくつかのメソッドを使用してメッセージをログに記録できます。Loggerクラスには、ロギング情報を出力するための次のメソッドがあります。
シニア番号 | メソッドと説明 |
---|---|
1 | public void debug(Object message) レベルLevel.DEBUGでメッセージを出力します。 |
2 | public void error(Object message) レベルLevel.ERRORのメッセージを出力します。 |
3 | public void fatal(Object message); レベルLevel.FATALでメッセージを出力します。 |
4 | public void info(Object message); レベルLevel.INFOでメッセージを出力します。 |
5 | public void warn(Object message); レベルLevel.WARNでメッセージを出力します。 |
6 | public void trace(Object message); レベル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!
レベルと組み合わせて使用すると、すべてのデバッグメッセージの意味がわかります。次の章でレベルについて説明します。その後、さまざまなレベルのデバッグと組み合わせてこれらのメソッドを使用する方法を十分に理解できます。
org.apache.log4j.Levelクラスは、次のレベルを提供します。Levelクラスをサブクラス化して、カスタムレベルを定義することもできます。
レベル | 説明 |
---|---|
すべて | カスタムレベルを含むすべてのレベル。 |
デバッグ | アプリケーションのデバッグに最も役立つきめ細かい情報イベントを指定します。 |
情報 | 大まかなレベルでアプリケーションの進行状況を強調する情報メッセージを指定します。 |
警告 | 潜在的に有害な状況を指定します。 |
エラー | アプリケーションの実行を継続できる可能性のあるエラーイベントを指定します。 |
致命的 | おそらくアプリケーションを中止させる非常に重大なエラーイベントを指定します。 |
オフ | 可能な限り最高のランクであり、ロギングをオフにすることを目的としています。 |
痕跡 | DEBUGよりもきめ細かい情報イベントを指定します。 |
レベルはどのように機能しますか?
レベルのログリクエスト p レベルのあるロガーで qp> = qの場合に有効になります。このルールはlog4jの中心です。レベルが順序付けられていることを前提としています。標準レベルの場合、ALL <DEBUG <INFO <WARN <ERROR <FATAL <OFFがあります。
次の例は、すべてのDEBUGメッセージとINFOメッセージをフィルタリングする方法を示しています。このプログラムは、ロガーメソッドsetLevel(Level.X)を使用して、目的のログレベルを設定します。
この例では、デバッグと情報を除くすべてのメッセージが出力されます。
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!
Apache log4jは、さまざまなレイアウトオブジェクトを提供します。各オブジェクトは、さまざまなレイアウトに従ってログデータをフォーマットできます。アプリケーション固有の方法でログデータをフォーマットするLayoutオブジェクトを作成することもできます。
すべてのレイアウトオブジェクトは、AppenderオブジェクトからLoggingEventオブジェクトを受け取ります。次に、LayoutオブジェクトはLoggingEventからメッセージ引数を取得し、適切なObjectRendererを適用してメッセージの文字列表現を取得します。
レイアウトタイプ
階層の最上位クラスは、抽象クラスorg.apache.log4j.Layoutです。これは、log4jAPIの他のすべてのレイアウトクラスの基本クラスです。
Layoutクラスはアプリケーション内で抽象として定義されており、このクラスを直接使用することはありません。代わりに、次のようなサブクラスを使用します。
DateLayout
HTMLLayout
PatternLayout.
SimpleLayout
XMLLayout
レイアウト方法
このクラスは、他のすべてのLayoutオブジェクトに共通するすべての操作のスケルトン実装を提供し、2つの抽象メソッドを宣言します。
シニア番号 | 方法と説明 |
---|---|
1 | public abstract boolean ignoresThrowable() ロギング情報が、ロギングイベントの一部として渡されたjava.lang.Throwableオブジェクトを処理するかどうかを示します。LayoutオブジェクトがThrowableオブジェクトを処理する場合、Layoutオブジェクトはそれを無視せず、falseを返します。 |
2 | public abstract String format(LoggingEvent event) 個々のレイアウトサブクラスは、レイアウト固有のフォーマットのためにこのメソッドを実装します。 |
これらの抽象メソッドとは別に、Layoutクラスは、以下にリストされているメソッドの具体的な実装を提供します。
シニア番号 | 方法と説明 |
---|---|
1 | public String getContentType() Layoutオブジェクトで使用されるコンテンツタイプを返します。基本クラスは、デフォルトのコンテンツタイプとしてtext / plainを返します。 |
2 | public String getFooter() ロギングメッセージのフッター情報を指定します。 |
3 | public String getHeader() ロギングメッセージのヘッダー情報を指定します。 |
各サブクラスは、これらのメソッドの具体的な実装をオーバーライドすることにより、クラス固有の情報を返すことができます。
ログ情報をファイルに書き込むには、org.apache.log4j.FileAppenderを使用する必要があります。
FileAppenderの構成
FileAppenderには、次の構成可能なパラメーターがあります。
プロパティ | 説明 |
---|---|
即時フラッシュ | このフラグはデフォルトでtrueに設定されています。これは、ファイルへの出力ストリームが各追加操作でフラッシュされることを意味します。 |
エンコーディング | 任意の文字エンコードを使用できます。デフォルトでは、これはプラットフォーム固有のエンコード方式です。 |
しきい値 | このアペンダーのしきい値レベル。 |
ファイル名 | ログファイルの名前。 |
fileAppend | これはデフォルトでtrueに設定されています。これは、ログ情報が同じファイルの末尾に追加されることを意味します。 |
bufferedIO | このフラグは、バッファ書き込みを有効にする必要があるかどうかを示します。デフォルトでは、falseに設定されています。 |
バッファサイズ | バッファI / Oが有効になっている場合は、バッファサイズを示します。デフォルトでは、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>
上記の構成でlog4j-サンプルプログラムを試すことができます。
複数のファイルにログインする
ファイルサイズが特定のしきい値に達した場合など、特定の理由でログメッセージを複数のファイルに書き込むことができます。
ログ情報を複数のファイルに書き込むには、FileAppenderクラスを拡張し、そのすべてのプロパティを継承するorg.apache.log4j.RollingFileAppenderクラスを使用する必要があります。
上記のFileAppenderのパラメーターに加えて、次の構成可能なパラメーターがあります。
プロパティ | 説明 |
---|---|
maxFileSize | これは、ファイルがロールされるファイルのクリティカルサイズです。デフォルト値は10MBです。 |
maxBackupIndex | このプロパティは、作成されるバックアップファイルの数を示します。デフォルト値は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に関連する追加のパラメーターのみを追加できます。
この構成例は、各ログファイルの最大許容サイズが5MBであることを示しています。最大サイズを超えると、新しいログファイルが作成されます。maxBackupIndexは2と定義されているため、2番目のログファイルが最大サイズに達すると、最初のログファイルが消去され、その後、すべてのログ情報が最初のログファイルにロールバックされます。
上記の構成でlog4j-サンプルプログラムを試すことができます。
毎日のログファイルの生成
ログ情報をきれいに記録するために、ログファイルを毎日生成する必要がある場合があります。
ログ情報を毎日ファイルに書き込むには、FileAppenderクラスを拡張し、そのすべてのプロパティを継承するorg.apache.log4j.DailyRollingFileAppenderクラスを使用する必要があります。
上記のFileAppenderのパラメーターに加えて、構成可能な重要なパラメーターは1つだけです。
プロパティ | 説明 |
---|---|
DatePattern | これは、ファイルをロールオーバーするタイミングと従うべき命名規則を示します。デフォルトでは、ロールオーバーは毎日深夜に実行されます。 |
DatePatternは、次のいずれかのパターンを使用してロールオーバースケジュールを制御します。
DatePattern | 説明 |
---|---|
'。' yyyy-MM | 毎月の終わりと翌月の初めにロールオーバーします。 |
'。' yyyy-MM-dd | 毎日深夜にロールオーバーします。これがデフォルト値です。 |
'。' yyyy-MM-dd-a | 毎日の正午と深夜にロールオーバーします。 |
'。' yyyy-MM-dd-HH | 1時間ごとにロールオーバーします。 |
'。' yyyy-MM-dd-HH-mm | 毎分ロールオーバーします。 |
'。' yyyy-ww | ロケールに応じて、毎週1日にロールオーバーします。 |
以下は、毎日正午と深夜にロールオーバーするログファイルを生成するためのサンプル構成ファイル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に関連する追加のパラメーターのみを追加できます。
上記の構成でlog4j-サンプルプログラムを試すことができます。
log4j APIは、指定されたデータベースにログ情報を配置できるorg.apache.log4j.jdbc.JDBCAppenderオブジェクトを提供します。
JDBCAppender構成
プロパティ | 説明 |
---|---|
バッファサイズ | バッファサイズを設定します。デフォルトのサイズは1です。 |
運転者 | ドライバークラスを指定された文字列に設定します。ドライバークラスが指定されていない場合、デフォルトでsun.jdbc.odbc.JdbcOdbcDriverになります。 |
レイアウト | 使用するレイアウトを設定します。デフォルトのレイアウトはorg.apache.log4j.PatternLayoutです。 |
パスワード | データベースのパスワードを設定します。 |
sql | ロギングイベントが発生するたびに実行されるSQLステートメントを指定します。これは、INSERT、UPDATE、またはDELETEである可能性があります。 |
URL | JDBCURLを設定します。 |
ユーザー | データベースのユーザー名を設定します。 |
ログテーブルの構成
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
);
サンプル構成ファイル
以下は、メッセージをLOGSテーブルに記録するために使用されるJDBCAppenderのサンプル構成ファイルlog4j.propertiesです。
# 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");
}
}
コンパイルして実行する
上記のプログラムをコンパイルして実行する手順は次のとおりです。設定したことを確認してくださいPATH そして CLASSPATH コンパイルと実行に進む前に適切に。
すべてのライブラリはで利用可能である必要があります 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)
Note:ここで、xは、ロギングイベントを生成したスレッドに関連付けられたネストされた診断コンテキスト(NDC)を出力するために使用されます。NDCを使用して、複数のクライアントを処理するサーバー側コンポーネントのクライアントを区別します。詳細については、Log4Jマニュアルを確認してください。