log4j 1.2.14のPatternLayout
PatternLayoutを利用すると出力する文字をC言語のprintf関数のように指定することができる。例えば
<param name=”ConversionPattern” value=”%C{1}” />
と指定すると
TestClass
といういうようにクラス名が表示されるわけだ。
変換文字 変換文字 内容 メモ c カテゴリー。%c{1}とすることで現在のカテゴリのみを表示することができる C クラス名。%C{1}とすることでクラス名だけを表示することができる。これを指定しないとパッケージ全てが表示される おもーい d 日付を表示する。%d{HH:mm:ss,SSS}などSimpleDateFormatの時刻パターン文字列と同様な文法が指定できる F ファイル名。ログ出力が発生したファイル名を指定できる。 l 位置情報。%Lと同じ? おもーい L 行番号 おもーい m 引数であるメッセージを表示する M メソッド名 おもーい n このプラットフォームの改行コード。行の最後に書くべし p Debug、Warnなどのログレベル r ログが出力されるまでの時間 t スレッド名。mainとか x スレッド名。ネスト化診断コンテキスト % %%でパーセントが出力できる フォーマット %20c カテゴリー名が20文字に満たなければ左側は空白が詰められます。 %-20c カテゴリー名が20文字に満たなければ、右側に空白がパディングされる %.30c カテゴリー名が30文字より長ければ、先頭から削除される %20.30c カテゴリー名が20文字より短ければ左に空白がパディングされる。しかし、カテゴリー名が30文字より長ければ、先頭から削除される。 %-20.30c カテゴリー名が20文字より短ければ右側に空白がパディングされる。しかし、カテゴリー名が30文字より長ければ先頭から削除される。
log4j 1.2.14のLoggerの拡張
デフォルトのLoggerは優秀なのだが、
メソッドの開始ログを出力するメソッドが欲しい リソースバンドルのキーを与えるとメッセージを取ってきてくれるメソッドが欲しい
といった拡張もしたくなる。
これまではLoggerクラスをラップして新しいクラスを作り、ラップクラスの中では、loggerを持っていて、処理をloggerに委譲してい
た。このやり方だと、getLoggerの引数にLoggerを使うクラスの完全修飾名を与えた場合、ラップクラスを使うクラスの数だけ、ラップクラスが
newされてしまう。
Loggerは内部でLogManagerとLoggerRepositoryを使って、作成したLoggerの重複を管理していると思うのだが、これをサブクラスで実装しても、
Loggerでも管理してまーす ラップクラスでも管理してまーす
となって気持ちが悪い。
こういう場合は、継承してメソッドを拡張する。このサブクラスの作り方はlog4jのexamplesフォルダ内を参考にすればいい。
場所:logging-log4j-1.2.14\examples\subclass
LoggerFactoryを作る
このクラスでは、Loggerを拡張したクラス(サブクラス)をnewする実装を書く。Loggerはこのfactoryクラスを使ってLoggerを作る。
public class AppLoggerFactory implements LoggerFactory {
public AppLoggerFactory() {}
public Logger makeNewLoggerInstance(String name) {
return new AppLogger(name);
}
} Loggerを継承したサブクラスを作る
ここには拡張するメソッドを記述する。あとはLogger.getLoggerメソッドで、上で作ったLoggerFactoryを渡せば完了。
public class AppLogger extends Logger {
private static final String FQCN = AppLogger.class.getName();
private static AppLoggerFactory factory = new AppLoggerFactory();
public AppLogger(String name){
super(name);
}
public static Logger getLogger(String name){
return (AppLogger) Logger.getLogger(name, factory);
}
public void startLog(String className, String methodName){
if(super.isDebugEnabled()){
super.log(FQCN, [...]
log4j 1.2.14のAppender
Appenderによってなにかしらに出力できるようになる。
thresholdパラメタ
閾値です。これはどのAppenderにでも追加できる。ログレベルのデフォルト値で、例えば、カテゴリでDEBUGとしてthresholdでINFOとする場合は、INFOが優先される。
ファイルはINFOでコンソールはDEBUGという風にできるようになる。
<param name=”threshold” value=”INFO”/> ConsoleAppender
コンソール出力用Appender。
log4j.xmlサンプル <appender name=”Console” class=”org.apache.log4j.ConsoleAppender”>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%d{yyyy/MM/dd HH:mm:ss}[%p]%m%n”/>
</layout>
</appender> FileAppender
ファイル出力用Appender。
log4j.xmlサンプル <appender name=”FOR_DEBUG” class=”org.apache.log4j.FileAppender”>
<param name=”File” value=”C:/temp/debug.log” />
<param name=”Append” value=”true” />
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%d{yyyy/MM/dd HH:mm:ss}[%p]%m%n”/>
</layout>
</appender> RollingFileAppender
ファイルサイズが指定サイズを超えたらローテートするAppenader。
log4j.xmlサンプル <appender name=”FOR_DEBUG” class=”org.apache.log4j.RollingFileAppender”>
<param name=”File” value=”C:/temp/debug.html” />
<param name=”Append” value=”true” />
<param name=”MaxFileSize” value=”1MB”/><!–100KBなどもOK–>
<param name=”MaxBackupIndex” value=”10″/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%d{yyyy/MM/dd HH:mm:ss}[%p]%m%n”/>
</layout>
</appender> DailyRollingFileAppender
日付ごとにローテートするAppender。
log4j.xmlサンプル <appender name=”DAILY” class=”org.apache.log4j.DailyRollingFileAppender”>
<param name=”file” value=”c:/temp/debug.log” />
<param value=”‘.’yyyy-MM-dd” name=”DatePattern”/>
<param [...]
log4j 1.2.14のことはじめ
パフォーマンス
isTraceEnabled()をしないとパフォーマンス落ちる。
「logger.debug(“aaa” + “aaaa”)」みたいに文字連結するばあいはこのif文をいれるとよい。でもめんどくさいのでLoggerをラッピングしてLogger内で実装した場合は効果がなくなる。
カテゴリ
カテゴリ名はパッケージ名を利用したほうがいいみたい。そうすればログを出さないクラスとかをきめることができるし。
log4j.xml
log4jの設定ファイルとしてlog4j.xmlを使える。名前は何でもいいみたい。
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE log4j:configuration SYSTEM “log4j.dtd”>
<log4j:configuration>
<appender name=”Console” class=”org.apache.log4j.ConsoleAppender”>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%d{yyyy/MM/dd HH:mm:ss}[%p]%m%n”/>
</layout>
</appender>
<root>
<priority value =”trace” />
<appender-ref ref=”Console”/>
</root>
</log4j:configuration>
以下のようにして設定ファイルを読み込ませることができる。
DOMConfigurator.configure(“c:/temp/log4j.xml”);
上記を実行しない場合は、classpathにあるlog4j.xmlを探すらしい。
最近のApache log4j
2008/3/26現在。log4jには3つの開発ブランチがある。
安定した1.2 開発中止1.3 実験的2.0
1.3の新機能は徐々に1.2に移行されたりしているらしい。互換性の問題で開発がとまっているようだ。
僕について
Dai Fujihara
A hero can be anyone.
藤原大はマネージャでありアジャイル実践者だ。そして、プロジェクトリーダー、チェンジ・エージェント、アジャイルコーチ、トレーナーでもある。彼はまたRedmine、Jenkinsといった開発を支援するツール環境の整備や、アジャイル開発を活用した創造的なソフトウェア開発の支援を行っている。さらに、趣味は沖縄離島巡りらしい。
ここ最近の人気
永久保存の本
Venkat Subramaniam (著), Andy Hunt (著), 木下 史彦 (監訳), 角谷 信太郎 (監訳)
アジャイルな習慣とは一体何なのか?本書ではプラクティスを交えながら、その姿勢を読者に問いかけている。世代や役割をこえて色褪せない「アジャイル」に対する良書。Amazonレビュー
Mike Cohn (著), マイク コーン (著), 安井 力 (翻訳), 角谷 信太郎 (翻訳)
採用した現在のタイトルは、見積りや計画づくりといったプロセスを、アジャイルに進めなければならないと謳っているのだ。見積りと計画づくりがアジャイルでないのに、プロジェクトがアジャイルであるということはありえない。(イントロダクションより)
Jonathan Rasmusson (著), 西村 直人 (翻訳), 角谷 信太郎 (翻訳)
アジャイルサムライ―それはソフトウェアを顧客に届ける猛々しきプロフェッショナルだ。本書では、圧倒的なアジャイルプロジェクトの姿を見せる。2011年爆発的にヒットしたアジャイル開発に情熱を持つエンジニアに届けたい本。タグ
Agile ant Apache bash Eclipse GlassFish install Java Javascript kobo Linux log4j Management Maven Open Source PHP Pukiwiki Python Redmine Ruby Ruby on Rails Scrum Spring Struts Struts2 Subversion Test Tomcat Trac VBA Web WebDriver WebLogic Windows WordPress 働く 勉強会 嫁(ベータ) 思い出し笑う 我思う 旅する 映画/ドラマ 英語を話す 読むと聞く 過去を語るアーカイブ










