1. Top
  2. Java Tips
  3. log4j

log4jの書き方

log4j は Jakarta のログ出力フレームワークです。ログの初期設定方法に property ファイルの他 XML でも指定可能です。ここでは、 property ファイルの指定方法について解説します。

log4jとcommons-loggingのログ出力レベル比較

commons-logging log4j
fatal FATAL
error ERROR
warn WARN
info INFO
debug DEBUG
trace DEBUG


log4jの設定は、プロパティファイル「log4j.properties」をクラスパスの通った場所に配置します。
その他に、「log4j.xml」でも設定は可能で、同じくクラスパスの通った場所に配置します。

log4jのは以下の3つの設定でいろいろなログの出力方法を指定できます。


ページの先頭へ

log4jの共通プロパティ

Appendar の種類に係わらず、共通して指定が必要な key 項目です。
key 説明,例
log4j.debug true もしくは false Loggingの初期化部分を表示するかどうかの指定
log4j.rootCategory DEBUG, INFO, WARN, ERROR, FATAL のいずれか root カテゴリの出力レベルの設定
log4j.category.カテゴリ名 DEBUG, INFO, WARN, ERROR, FATAL のいずれか カテゴリ名の出力レベルの設定
log4j.appender.カテゴリ名 Appender クラスの指定 org.apache.log4j.ConsoleAppender, org.apache.log4j.RollingFileAppender 等
log4j.appender.カテゴリ名.layout レイアウトを行うクラスの指定 org.apache.log4j.PatternLayout
log4j.appender.カテゴリ名.layout.conversionPattern 出力フォーマットの指定 %m%n




ページの先頭へ

カテゴリの設定

カテゴリには、rootカテゴリと、ユーザーが定義するカテゴリ名の2種類あります。

log4j.rootCategory= ログレベル, アペンダ名1, アペンダ名2, ・・・
log4j.category.カテゴリ名 = ログレベル, アペンダ名1, アペンダ名2, ・・・

ユーザーが定義するカテゴリ名は、通常はパッケージ名やクラス名でドットで区切られた階層的 な名前付けを行います。
例えば、カテゴリ名"com.livtp"は、カテゴリ名"com.livetp.abc"に対して親となり、全てのカテゴリの親はrootカテゴリになります。

それぞれのカテゴリは、ログレベルやアペンダを割り当てられ、親カテゴリのログレベルやアペンダを子カテゴリは継承できます。

# ログレベル、アペンダ名設定
log4j.rootCategory=INFO, consoleLog, fileLog

# ログレベルの詳細設定
log4j.category.org.springframework=INFO
log4j.category.org.apache.struts=INFO
log4j.category.com.livetp=DEBUG



ページの先頭へ

レイアウトの設定


log4j.appender.アペンダ名.layout = レイアウトクラス名
log4j.appender.アペンダ名.layout.ConversionPattern = レイアウトパターン

log4j レイアウトクラス一覧

レイアウトクラス 概要
org.apache.log4j.SimpleLayout シンプルなレイアウト。デフォルトレイアウト
org.apache.log4j.TTCCLayout 時間、スレッド名、カテゴリ名、メッセージを出力する。
org.apache.log4j.HTMLLayout HTML形式で出力する。
org.apache.log4j.XMLLayout XML形式で出力する。
org.apache.log4j.PatternLayout ユーザでレイアウトを指定できる。指定可能なレイアウトパターンは以下を参照して下さい。


log4j 指定可能なレイアウトパターン

レイアウトパターン 概要
%c カテゴリー名。 %c{1} と記述した場合、一番「下の」 レベルのみ出力できる。
「sample.pg.LoggerSample」の場合、「LoggerSample」となる。
%C ログを生成したクラス名。カテゴリ名では無くクラス名。
%C{1} と記述した場合、一番「下の」 レベルのみ出力できる。
「sample.pg.LoggerSample」の場合、「LoggerSample」となる。
%d 日付。 %d{yyyy-MMM-dd HH:mm:ss,SSS} の様に詳細に指定できる。
%l %F、%L、%Mを纏めた情報。※性能に問題あり。
%F ログを生成したソースファイル名。※性能に問題あり
%L ログを生成した箇所のソースの行番号。※性能に問題あり
%M ログを生成したメソッドの名前。※性能に問題あり
%m ログメッセージ
%x NDC でpushした値
%X{key} MDC に保存された key の値
%n 改行コードを生成する。
%p ログレベル(FATALやINFOなど)
%r アプリケーションが開始してからの通算時間(ミリ秒)
%t ログを生成したスレッド名


# コンソールアペンダ設定例
log4j.appender.consoleLog=org.apache.log4j.ConsoleAppender
log4j.appender.consoleLog.Target=System.out
log4j.appender.consoleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleLog.layout.ConversionPattern=[%d{yyyy/MM/dd HH:mm:ss.SSS}]
                                                            [%p][%t][%C{1}] %m%n




ページの先頭へ

アペンダの設定


log4j.appender.アペンダ名 = アペンダクラス名
log4j.appender.アペンダ名.プロパティ名1 = 設定値
log4j.appender.アペンダ名.プロパティ名2 = 設定値
          :

log4j アペンダ一覧

設定内容 概要
org.apache.log4j.ConsoleAppender コンソールにログ出力する
org.apache.log4j.FileAppender ファイルにログ出力する
org.apache.log4j.DailyRollingFileAppender ファイルにログ出力する。日次でログローテーションする
org.apache.log4j.RollingFileAppender ファイルにログ出力する。一定サイズでログローテーションする。
org.apache.log4j.net.JMSAppender JMSにログ出力する。
org.apache.log4j.nt.NTEventLogAppender Windowsイベントログにログ出力する
org.apache.log4j.net.SMTPAppender メールにログ出力する。
org.apache.log4j.net.SocketAppender ソケットにログ出力する。
org.apache.log4j.net.SyslogAppender Syslogにログ出力する。
org.apache.log4j.AsyncAppender 非同期ログ出力


log4j コンソールにログ出力(org.apache.log4j.ConsoleAppender)

コンソールにログを出力するには、アペンダクラス「org.apache.log4j.ConsoleAppender」を指定します。
プロパティ 定義内容
Target ログの出力先を、標準出力(System.out)または、標準エラー出力(System.err)で指定します
Encoding ログ出力で使用するエンコーディングを指定します。デフォルトは、システムデフォルトエンコーディングが使用されます。
Threshold ”INFO”を指定すると、INFO以下のログは出力せずに無視する


# コンソールアペンダ設定例
log4j.appender.consoleLog=org.apache.log4j.ConsoleAppender
log4j.appender.consoleLog.Target=System.out
log4j.appender.consoleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleLog.layout.ConversionPattern
	=[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%t][%C{1}] %m%n




log4j ファイルにログ出力(org.apache.log4j.RollingFileAppender)

ローテーションしながらファイル出力するには、アペンダクラス「org.apache.log4j.RollingFileAppender」を指定します。
ローテーションサイクルは、ログファイルサイズを指定します。

プロパティ 定義内容
MaxFileSize ローテンションするログファイルサイズを指定します。
「1024」、「2KB」、「5MB」と指定できます。
MaxBackupIndex

バックアップファイルをいくつ保持するか指定します。
例えば、MaxBackupIndex=3を指定すると、ログファイル.1→ログファイル.2→ログファイル.3とローテンションしていき、それ以上古くなると破棄されます。

File 出力ファイルパス
Append trueを指定した場合は、追加でファイル出力します。デフォルトはfalse
BufferedIO trueを指定した場合、バッファリングします。デフォルトは、false
BufferSize バッファリングする場合のバッファサイズを指定します。
Encoding ログ出力で使用するエンコーディングを指定します。デフォルトは、システムデフォルトエンコーディングが使用されます。
Threshold ”INFO”を指定すると、INFO以下のログは出力せずに無視する


# ファイルアペンダ設定例
log4j.appender.fileLog=org.apache.log4j.RollingFileAppender
log4j.appender.fileLog.File = logs/livetp.log
log4j.appender.fileLog.Append=true
log4j.appender.fileLog.maxBackupIndex = 3
log4j.appender.fileLog.maxFileSize = 128MB
log4j.appender.fileLog.layout = org.apache.log4j.PatternLayout
log4j.appender.fileLog.layout.ConversionPattern
	=[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%t][%C{1}] %m%n




log4j 日付ローテーションでファイルにログ出力する(org.apache.log4j.DailyRollingFileAppender)

日付でローテーションしながらファイル出力するには、アペンダクラス「org.apache.log4j.DailyRollingFileAppender」を指定します。
ローテーションサイクルは、日次/毎時/月次などのサイクルを指定できます。

プロパティ 定義内容
DatePattern ローテートサイクルを、「月次」、「週次」、「日次」、「毎時」か指定する。詳細は、以下を参照して下さい。
File 出力ファイルパス
Append trueを指定した場合は、追加でファイル出力します。デフォルトはfalse
BufferedIO trueを指定した場合、バッファリングします。デフォルトは、false
BufferSize バッファリングする場合のバッファサイズを指定します。
Encoding ログ出力で使用するエンコーディングを指定します。デフォルトは、システムデフォルトエンコーディングが使用されます。
Threshold ”INFO”を指定すると、INFO以下のログは出力せずに無視する


「DatePattern」のローテート指定パターン
パターン 定義内容
'.'yyyy-MM 月次でローテーションします。
2006年6月の例) ファイル名.2006-06  
'.'yyyy-ww 週次でローテーションします。”ww”には、年初からの通算の週数が指定されます
'.'yyyy-MM-dd 日次でローテーションします。
'.'yyyy-MM-dd-a 毎日AM0:00とPM:12:00にローテンションします。
'.'yyyy-MM-dd-HH 毎時でローテーションします。
'.'yyyy-MM-dd-HH-mm 毎分でローテーションします。


パターン最初で、ドットを指定してますが、任意の文字列を指定できます。例えば、'-'(ハイフン)を指定すれば、月次ローテーションの場合は 「ファイル名-2006-06.log」となります。

# ファイルアペンダ設定例
log4j.appender.fileLog=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileLog.File=logs/livetp.log
log4j.appender.fileLog.DatePattern='.'yyyy-MM-dd
log4j.appender.fileLog.Append=true
log4j.appender.fileLog.layout=org.apache.log4j.PatternLayout
log4j.appender.fileLog.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss,SSS} %-5p %c - %m%n


日付ベースのローテーションする場合、バックアップファイルをいくつ保持するか指定できません。


【log4j.properties】
################################################################################
##
## Log4jの設定ファイル。
##
## ログファイルのロケーションを定義する。
##
################################################################################

# Log4JLogger初期化パラメタ設定

# ログレベル、アペンダ名設定
log4j.rootCategory=INFO, consoleLog, fileLog

# ログレベルの詳細設定
log4j.category.org.springframework=INFO
log4j.category.org.apache.struts=INFO
log4j.category.com.livetp=DEBUG

# コンソールアペンダ設定
log4j.appender.consoleLog=org.apache.log4j.ConsoleAppender
log4j.appender.consoleLog.Target=System.out
log4j.appender.consoleLog.layout=org.apache.log4j.PatternLayout
log4j.appender.consoleLog.layout.ConversionPattern
	=[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%t][%C{1}] %m%n

# ファイルアペンダ設定
log4j.appender.fileLog=org.apache.log4j.RollingFileAppender
log4j.appender.fileLog.File=logs/livetp.log
log4j.appender.fileLog.Append=true
log4j.appender.fileLog.maxBackupIndex=3
log4j.appender.fileLog.maxFileSize=128MB
log4j.appender.fileLog.layout=org.apache.log4j.PatternLayout
log4j.appender.fileLog.layout.ConversionPattern
	=[%d{yyyy/MM/dd HH:mm:ss.SSS}][%p][%t][%C{1}] %m%n


#log4j.appender.fileLog=org.apache.log4j.DailyRollingFileAppender
#log4j.appender.fileLog.File=logs/livetp.log
#log4j.appender.fileLog.DatePattern='.'yyyy-MM-dd
#log4j.appender.fileLog.Append=true
#log4j.appender.fileLog.layout=org.apache.log4j.PatternLayout
#log4j.appender.fileLog.layout.ConversionPattern
	=%d{yyyy/MM/dd HH:mm:ss,SSS} %-5p %c - %m%n



ページの先頭へ