- 準備
- 設定ファイルを作成
- (前提知識)エラーレベル
- 設定ファイルの内容(appender箇所)
- 設定ファイルの内容(layout箇所)
- 設定ファイルの内容(logger 、root箇所)
- 使用方法
- 参考
準備
〇パッケージをDL、解凍(ここではlog4j-1.2.17.zipを使用)
http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.17/log4j-1.2.17.zip
〇クラスパス追加
プロジェクトを右クリックからビルド・パスの構成
外部JARの追加
DLしたjarファイルを選択
設定ファイルを作成
ファイル名:log4j.xml または log4j.properties
※xmlとpropertiesとで記述方法が異なる(例はxmlパターン)
作成場所:クラスパス上(クラスパス上でない場合はソースで指定可能)
(前提知識)エラーレベル
FATAL | 致命的なエラー。プログラムの異常終了を伴うようなもの |
ERROR | エラー。予期しないその他の実行時エラー |
WARN | 警告。異常とは言い切れないが正常とも異なる何らかの予期しない問題 |
INFO | 情報。実行時の何らかの注目すべき事象(開始や終了など) |
DEBUG | デバッグ用の情報。システムの動作状況に関する詳細な情報 |
TRACE | トレース情報。更に詳細な情報 |
設定ファイルの内容(appender箇所)
出力のパターンを指定する
コンソール出力(ConsoleAppender)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" > <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> </appender> <root> <appender-ref ref="stdout"/> </root> </log4j:configuration>
<パラメータ>
・Target
System.out:標準出力
System.err:エラー出力
・Threshold
出力するエラーレベルを指定(INFOならINFO以上が出力対象)
ファイル出力(FileAppender)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" > <appender name="file" class="org.apache.log4j.FileAppender"> <param name="File" value="./sample.log" /> <param name="Append" value="true" /> <param name="Encoding" value="Shift_JIS" /> <param name="Threshold" value="info" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> </appender> <root> <appender-ref ref="file"/> </root> </log4j:configuration>
<パラメータ>
・File
ファイル名を指定する。実行ディレクトリからの相対表記が可能
・Append
true:追加モード
false:非追加モード(毎回ファイルが作られる)
・Encoding
エンコーディングを指定(デフォルトはシステムのデフォルトエンコーディング)
・Threshold
出力するエラーレベルを指定(INFOならINFO以上が出力対象)
ファイル出力 日付でローテーション(DailyRollingFileAppender)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" > <appender name="dailyRotation" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="./sample.log" /> <param name="Append" value="true" /> <param name="Encoding" value="Shift_JIS" /> <param name="Threshold" value="info" /> <param name="DatePattern" value="'.'yyyy-MM-dd" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> </appender> <root> <appender-ref ref="dailyRotation" /> </root> </log4j:configuration>
<パラメータ>
・File
ファイル名を指定する。実行ディレクトリからの相対表記が可能
・Append
trueにしておく(falseだとファイルが新規で作られない)
・Encoding
エンコーディングを指定(デフォルトはシステムのデフォルトエンコーディング)
・Threshold
出力するエラーレベルを指定(INFOならINFO以上が出力対象)
・DatePattern
'.'yyyy-MM:月次でローテーション(ローテ後のファイル名:ファイル名.2006-06)
'.'yyyy-MM-dd:日次でローテーション
'.'yyyy-MM-dd-HH:毎時でローテーション
'.'yyyy-MM-dd-HH-mm:毎分でローテーション
'.'yyyy-MM-dd-a:毎日AM0:00とPM:12:00にローテンション
'.'yyyy-ww:週次でローテーション
ファイル出力 ファイルサイズでローテーション(RollingFileAppender)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" > <appender name="sizeRotation" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="./sample.log" /> <param name="Append" value="true" /> <param name="Encoding" value="Shift_JIS" /> <param name="Threshold" value="info" /> <param name="MaxFileSize" value="10KB" /> <param name="MaxBackupIndex" value="3" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%m%n" /> </layout> </appender> <root> <appender-ref ref="sizeRotation" /> </root> </log4j:configuration>
<パラメータ>
・File
ファイル名を指定する。実行ディレクトリからの相対表記が可能
・Append
trueにしておく(falseだとファイルが新規で作られない)
・Encoding
エンコーディングを指定(デフォルトはシステムのデフォルトエンコーディング)
・Threshold
出力するエラーレベルを指定(INFOならINFO以上が出力対象)
・MaxFileSize
ローテンションするログファイルサイズを指定(2KB、5MBなど)
・MaxBackupIndex
バックアップファイルの数を指定
(例.2の場合、ログファイル.1→ログファイル.2とローテンションしていき、
それ以上古くなると破棄される)
設定ファイルの内容(layout箇所)
出力内容を指定する
シンプルレイアウト(SimpleLayout)
<layout class="org.apache.log4j.PatternLayout">
INFO - ログ出力
時間、スレッド名、カテゴリ名(TTCCLayout)
<layout class="org.apache.log4j.TTCCLayout"> <param name="CategoryPrefixing" value="true" /> <param name="ThreadPrinting" value="true" /> <param name="DateFormat" value="ISO8601" /> </layout>
20 3月 2020 05:18:44,031 [main] INFO Test - ログ出力
<パラメータ>
・CategoryPrefixing
true:カテゴリー名(Testの部分(Logger.getLoggerの引き数))を付ける
false:カテゴリー名を付けない
・ThreadPrinting
true:スレッド名([main] の部分)を付ける
false:スレッド名を付けない
・DateFormat
DATE:英米系の日時表記(20 3月 2020 05:41:52,419 INFO - ログ出力)
RELATIVE:プロセス開始からの時間(2 INFO - ログ出力)
ABSOLUTE:現在「時間」のみ(05:39:48,310 INFO - ログ出力)
ISO8601:フルフォーマット(2020-03-20 05:40:24,880 INFO - ログ出力)
HTML形式(HTMLLayout)
<layout class="org.apache.log4j.HTMLLayout">
XML形式(XMLLayout)
<layout class="org.apache.log4j.XMLLayout">
ユーザでレイアウトを指定(PatternLayout)
<layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%-5p] [%d{yyyy/MM/dd HH:mm:ss.SSS}] [%c] [%t] - %m%n" /> </layout>
[INFO ] [2020/03/20 23:32:04.346] [Test] [main] - ログ出力
<パラメータ>
・ConversionPattern
%p:ログレベル(INFO)
%d:日付(%d{yyyy/MM/dd HH:mm:ss.SSS})
%c:カテゴリー名
%t:スレッド名
%m:ログメッセージ
%n:改行コード
%と文字の間(組み合わせ可能)
「-」(左詰め)、「数字」(最小字数)、「.数字」(最大字数)
設定ファイルの内容(logger 、root箇所)
出力するロガーを指定
ルート
全て対象
<root> <level value ="info" /> <appender-ref ref = "stdout" /> <appender-ref ref = "file" /> </root>
<パラメータ>
level:出力するエラーレベルを指定(INFOならINFO以上が出力対象)
appender-ref:出力したいappender nameを指定
ロガー
ロガーで指定
<logger name = "Test"> <level value ="info" /> <appender-ref ref = "stdout" /> </logger>
<パラメータ>
level:出力するエラーレベルを指定(INFOならINFO以上が出力対象)
appender-ref:出力したいappender nameを指定
使用方法
class Test { private Logger log = Logger.getLogger(Test.class); void DisplayLog() { URL fileXmlUrl = Loader.getResource("log4j.xml"); DOMConfigurator.configure(fileXmlUrl); log.info( "ログ出力" ); try { FileReader r = new FileReader("sample.txt"); } catch (Exception e) { log.error( "エラー", e ); } } } public class Main { public static void main(String[] args) { Test test = new Test(); test.DisplayLog(); } }
[INFO ] [2020/03/21 01:20:25.614] [Test] [main] - ログ出力 [ERROR] [2020/03/21 01:20:25.616] [Test] [main] - エラー java.io.FileNotFoundException: sample.txt (指定されたファイルが見つかりません。) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.(FileInputStream.java:157) at java.base/java.io.FileInputStream. (FileInputStream.java:112) at java.base/java.io.FileReader. (FileReader.java:60) at Test.DisplayLog(Main.java:17) at Main.main(Main.java:27)
第二引数にエラー内容を指定することが可能