Log4j コンポーネントの構成
Log4j は 3 つの重要なコンポーネントで構成されます。
1. ログ情報の優先順位(Logger)
2. ログ情報の出力先(Appender)
3. ログ情報の出力形式(レイアウト)。
まとめ:
ログ情報の優先順位は高から低まであり、ERROR、WARN、INFO、DEBUG があり、それぞれこのログ情報の重要性を指定するために使用されます。
ログ情報の出力先は、ログをコンソールに出力するかファイルに出力するかを指定します。
出力形式により、ログ情報の表示内容が制御されます。
Log4j の概要
Log4j は Apache のオープンソース プロジェクトです。Log4j を使用すると、コンソール、ファイル、GUI コンポーネント、さらにはソケット サーバー、NT イベント レコーダー、UNIX Syslog デーモンなどへのログ情報の送信先を制御できます。各ログ情報のレベルを定義することで、ログの生成プロセスをより詳細に制御できます。 log4j -- Java のログ (Java ログ)。
Log4j のダウンロード アドレス: http://logging.apache.org/log4j/2.x/download.html
Log4j設定ファイルの形式
Log4j は 2 つの構成ファイル形式をサポートしています。
1.XML形式ファイル
2. プロパティ形式のファイル
構成ファイルをまったく使用せずに、コードで Log4j 環境を構成することもできます。ただし、構成ファイルを使用すると、アプリケーションがより柔軟になります。
Log4j定義設定ファイル
1. ルートロガーを構成する
その構文は次のとおりです。
パラメータの説明:
level はロギングの優先度であり、OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL、または定義したレベルに分類されます。
オフ: 最高レベル。すべてのログ記録をオフにするために使用されます。
致命的: 各致命的なエラー イベントによってアプリケーションが終了することを示します。
エラー: エラー イベントが発生しても、システムの継続的な動作には影響しないことを示します。
警告: 潜在的なエラー状況が発生することを示します。
情報: 通常、アプリケーションの実行プロセス全体を強調する、粗いレベルで使用されます。
デバッグ: 一般的に粗いレベルで、アプリケーションの実行プロセス全体に重点を置きます。
すべて: 最低レベル。すべてのログ記録を有効にするために使用されます。
Log4j では、優先順位は高から低まで、ERROR、WARN、INFO、DEBUG の 4 つのレベルのみを使用することをお勧めします。ここで定義したレベルにより、アプリケーション内の対応するレベルのログ情報のオンとオフを制御できます。
appenderNameはログ情報の出力先を指し、同時に複数の出力先を指定できます。
2. ログ情報の出力先Appenderの設定
その構文は次のとおりです。
log4j.appender.appenderName.option1 = 値1
...
log4j.appender.appenderName.option = valueN
org.apache.log4j.ConsoleAppender(コンソール)
org.apache.log4j.FileAppender(ファイル)
org.apache.log4j.DailyRollingFileAppender (毎日ログ ファイルを生成します)
org.apache.log4j.RollingFileAppender (ファイルサイズが指定されたサイズに達すると新しいファイルを生成します)
org.apache.log4j.WriterAppender (ログ情報をストリーミング形式で指定した場所に送信します)
3. ログ情報の形式を設定する
構文は次のとおりです。
log4j.appender.appenderName.layout.option1 = value1 …
log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout (HTML テーブル形式のレイアウト)、
org.apache.log4j.PatternLayout (レイアウトパターンを柔軟に指定可能)、
org.apache.log4j.SimpleLayout (ログ情報のレベルと情報文字列が含まれます)、
org.apache.log4j.TTCCLayout (ログ生成時間、スレッド、カテゴリなどの情報が含まれます)
Log4J は、C 言語の printf 関数と同様の出力形式を使用して、ログ情報をフォーマットします。 出力パラメータは次のとおりです。
%mコードで指定されたメッセージを出力します
%p 出力優先順位、つまり DEBUG、INFO、WARN、ERROR、FATAL
%r にはアプリケーションの起動からログ情報が出力されるまでにかかったミリ秒が出力されます。
%c は、それが属するカテゴリ (通常はクラスの完全名) を出力します。
%tログイベントを生成したスレッドの名前を出力します。
%n は、キャリッジ リターンとライン フィード文字を出力します。これは、Windows プラットフォームでは「rn」、Unix プラットフォームでは「n」です。
%d は、ログ時点の日付または時刻を出力します。デフォルトの形式は ISO8601 です。%d{yyyMMMddHH:mm:ss,SSS} のように、後で形式を指定することもできます。出力は次のようになります。 2002 22:10 :28,921
%l ログ イベントが発生した場所 (カテゴリ名、発生したスレッド、コード内の行番号など) を出力します。例: Testlog4.main(TestLog4.java:10)
%x: 現在のスレッドに関連付けられた NDC (ネストされた診断環境) を出力します。特に、javaservlet などのマルチクライアントおよびマルチスレッド アプリケーションで使用されます。
%%:「%」文字を出力 %F:ログメッセージが生成されるファイル名を出力
%L: 出力コードの行番号
%m: コードで指定されたメッセージと生成された特定のログ情報を出力します。
%n: キャリッジ リターンとライン フィード文字を出力します。これは、Windows プラットフォームでは「/r/n」、Unix プラットフォームでは「/n」です。ログ情報を出力する場合、% とモード文字の間に修飾子を追加できます。最小幅と最大幅、およびテキストの配置を制御します。
のように:
1)%20c: 出力カテゴリの名前を指定します。最小幅は 20 です。カテゴリ名が 20 未満の場合、デフォルトで右揃えになります。
2)%-20c: 出力カテゴリの名前を指定します。最小幅は 20 です。カテゴリ名が 20 未満の場合、「-」記号は左揃えを指定します。
3)%.30c: 出力カテゴリ名を指定します。最大幅は 30 です。カテゴリ名が 30 より大きい場合、左側の余分な文字は切り捨てられます。30 未満の場合は、左側の余分な文字が切り取られます。スペースは入れないでください。
4)%20.30c: カテゴリ名が 20 文字未満の場合は、スペースを埋めて右揃えにし、名前が 30 文字を超える場合は、左側の文字を切り捨てます。
log4j.xmlの設定方法
<?xml バージョン="1.0" エンコーディング="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<アペンダー名="アペンダー1"
>
<param name="ファイル" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<レイアウト>
</レイアウト>
</appender>
<ルート>
<レベル値="デバッグ" />
<appender-ref ref="appender1" />
</root>
</log4j:設定>
プログラムで Log4j を使用する前に、まず commons-logging.jar とlogging-log4j-1.2.9.jar をクラスパスにインポートし、log4j.properties を src ルート ディレクトリに置きます。 クラスで log4j を使用するには、まず静的変数 Loggerlogger=Logger.getLog("classname") を宣言します。これで使用できるようになります。
使用法は次のとおりです: logger.debug("debugmessage") または logger.info("infomessage")。
1. ロガーを入手する
Log4j を使用する最初のステップは、ログ情報の制御を担当するロガーを取得することです。
その構文は次のとおりです。
publicstaticLoggergetLogger(文字列名)
指定された名前でロガーを取得し、必要に応じてその名前の新しいロガーを作成します。通常、名前には次のようなこのクラスの名前が使用されます。
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. 設定ファイルを読み込む
ロガーを取得した後の 2 番目のステップは、Log4j 環境を構成することです。構文は次のとおりです。
BasicConfigurator.configure(): デフォルトの Log4j 環境を自動的かつ迅速に使用します。
PropertyConfigurator.configure(StringconfigFilename): Java のプロパティ ファイルを使用して記述された設定ファイルを読み取ります。
DOMConfigurator.configure(Stringfilename): XML 形式で構成ファイルを読み取ります。
3. レコード情報(フォーマットされたログ情報)の挿入
上記の 2 つの必要な手順が完了すると、異なる優先順位を持つログ ステートメントを使用して、ログを記録したい場所に簡単に挿入できます。構文は次のとおりです。
Logger.debug(オブジェクトメッセージ);
Logger.info(オブジェクトメッセージ);
Logger.warn(オブジェクトメッセージ);
Logger.error(オブジェクトメッセージ);
プログラムのデモンストレーション
1. プログラムを使用してログ情報を出力する
インポート java.io.IOException;
org.apache.commons.logging.impl.Log4JLogger をインポートします。
org.apache.log4j.BasicConfigurator をインポートします。
org.apache.log4j.FileAppender をインポートします。
org.apache.log4j.Layout をインポートします。
org.apache.log4j.Level をインポートします。
org.apache.log4j.Logger をインポートします。
org.apache.log4j.SimpleLayout をインポートします。
/**
*
* @バージョン: 1.1
*
* @author: Su Ruonian<a href="mailto:[email protected]">メールを送信</a>
*
* @since: 1.0 作成時間: 2013-1-1 03:19:42 pm
*
* @function: コードを通じてログを出力します
*
*/
パブリック クラス Log4jPrintByCode {
プライベート静的ロガー logger = Logger.getLogger(Log4jPrintByCode.class);
private Layout レイアウト = new SimpleLayout();
プライベート FileAppender ファイルアペンダー;
// オブジェクトの作成時に構築依存関係を使用して初期化する
public Log4jPrintByCode(レイアウト レイアウト, レベル level,String distDir){
BasicConfigurator.configure(); //デフォルトの構成情報を使用するため、log4j.properties を記述する必要はありません。
試す {
init(レイアウト、レベル、distDir);
} catch (例外 e) {
e.printStackTrace();
}
}
public void init(Layout レイアウト, Level level,String distDir) throws Exception{
logger.setLevel(level); //ログ出力レベルを設定します。
fileAppender = 新しい FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); //出力ターミナルを追加します
}
public static void main(String[] args) {
SimpleLayout レイアウト = new SimpleLayout();
文字列 logDir = "log4jcode.Log";
Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
//以下の情報が出力されます
log4jCode.logger.info("log4j によるログ情報の出力");
log4jCode.logger.warn("log4j によるログ警告出力");
log4jCode.logger.error("log4j によるログエラー出力");
}
パブリックレイアウト getLayout() {
レイアウトを返します。
}
public void setLayout(レイアウト レイアウト) {
this.layout = レイアウト;
}
public FileAppender getFileAppender() {
fileAppender を返します。
}
public void setFileAppender(FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// レコード情報レベル情報
if (logger.isInfoEnabled()) {
logger.info("これは Dao からの情報メッセージです。");
}
2.Log4Jは同じログ情報を複数の出力先に出力します
/* データベースを切り替えます */
db_log4j を使用します。
/* ログ情報テーブル */
テーブルを作成します tb_log(
logId int null ではありません auto_increment コメント 'シリアル番号'、
createDate varchar(45) デフォルトの null コメント 'ログ生成時刻'、
スレッド varchar(45) デフォルトの null コメント '現在のスレッド'、
level varchar(45) デフォルトの null コメント '現在のログ レベル'、
class varchar(45) デフォルトの null コメント 'ログクラスの生成',
message varchar(245) デフォルトの null コメント 'ログ固有の情報',
主キー(logId)
);
アプリケーション インスタンスは、ログ情報をコンソール、ファイル、データベースに同時に出力します。
データベースとテーブルを作成する
/* データベースを切り替えます */
db_log4j を使用します。
/* ログ情報テーブル */
テーブルを作成します tb_log(
logId int null ではありません auto_increment コメント 'シリアル番号'、
createDate varchar(45) デフォルトの null コメント 'ログ生成時刻'、
スレッド varchar(45) デフォルトの null コメント '現在のスレッド'、
level varchar(45) デフォルトの null コメント '現在のログ レベル'、
class varchar(45) デフォルトの null コメント 'ログクラスの生成',
message varchar(245) デフォルトの null コメント 'ログ固有の情報',
主キー(logId)
);
#コントローラーへのA1出力を定義
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#A1 のレイアウト モードを PaternLayout として定義します
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# A1 の出力形式を定義する
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#A2 出力をファイルに定義
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#A2 が出力するファイルを定義する
log4j.appender.A2.File=./log/sysLog.log
#A2出力ファイルの最大長を定義します
log4j.appender.A2.MaxFileSize = 1KB
#A2のバックアップファイル数を定義
log4j.appender.A2.MaxBackupIndex = 3
#A2 のレイアウト モードを PatternLayout として定義します
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#A2の出力モードを定義
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n
#データベースへのA3出力を定義
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#A3 のレイアウトと実行される SQL ステートメントを定義します
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message)values('%d','%t','%-5p','%c','%m ')
org.apache.log4j.Logger をインポートします。
org.apache.log4j.PropertyConfigurator をインポートします。
/**
*
* @バージョン: 1.1
*
* @author: Su Ruonian<a href="mailto:[email protected]">メールを送信</a>
*
* @since: 1.0 作成時間: 2013-1-1 04:13:59 PM
*
* @function: 設定ファイルを通じて複数の出力先へのログ情報の出力を制御します
*
*/
パブリック クラス Log4jPrintByConfigure {
プライベート静的ロガー logger = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main(String[] args) throws Exception {
//ログ設定ファイル log4j.properties をロードします
PropertyConfigurator.configure("configure/log4j.properties");//ファイルは src と同じディレクトリの configure フォルダに保存されます
//src配下に配置する場合、パラメータは「bin/log4j.properties」または「src/log4j.properties」とする。標準ではbinを使用することを推奨する。
//以下の情報が出力されます
logger.debug("ロガー印刷デバッグメッセージ");
logger.info("ロガー印刷情報メッセージ");
logger.warn("ロガー印刷警告メッセージ");
logger.error("ロガー印刷エラーメッセージ");
logger.fatal("これは致命的なメッセージです");
}
}