log4jメモ


log4jメモ

ログがプロセスごとに追記して欲しいが上書きになる

ログファイルをvi等で編集すると上書きになる可能性があるらしい。

ローテートしたときにあるパッケージからのログが出なくなる

複数の appender が同じ出力先をみているとローテートしたときに不具合がおきる

log4j.xmlサンプル

orgで始まるパッケージはWARNで、jp.co.mokeで始まるパッケージはDEBUGでログ出力

<?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="threshold" value="DEBUG"/>
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %.5p '%m' %F%n"/>
   </layout>
 </appender>

 <appender name="FILEOUT" class="org.apache.log4j.FileAppender" >
   <param name="threshold" value="WARN"/>
   <param name="file" value="c:\\logfile.log"/>
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %.5p '%m' %F%n"/>
   </layout>
 </appender>

 <appender name="DAILY" class="org.apache.log4j.DailyRollingFileAppender">
   <param name="file" value="c:\\logfile.log" /> 
   <param name="threshold" value="INFO"/>
   <param name="append" value="true" />
   <layout class="org.apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %.5p '%m' %F%n"/>
   </layout>
 </appender>

 <category name="org">
	<priority value="WARN" /> 
 </category>
 <category name="jp.co.moke">
	<priority value="DEBUG" /> 
 </category>

 <root>
   <appender-ref ref="STDOUT" />
   <appender-ref ref="FILEOUT" />
 </root>

</log4j:configuration>

syslogとの違い

1.syslog 関数と syslogd とのアクセスは何が使われていますか?

 syslog(3)とsyslogdの間はUNIX内部socket(PF_UNIX)となり
 ます。simplesocketserverとlog4cxxの間はネットワーク
 socket(PF_INET)となります。
 同じサーバ内であれば両者の差はありません。

2.アプリ毎に個別ファイルの保存は可能ですか?またそのパスは?

 ファイルのパスはシステムで最大7つまで設定できます。
 (local0〜local6)
 backserverアプリケーションを8つ以上動作させる場合には、
 なにか他の考慮(batch系logを1つに纏める等)の必要が出て
 来ます。
 ファイルの保存先パスについては制限ありません。

3.ログのローテーションはどう管理しますか?

 logrotateの設定を工夫する事で可能となります。

■ パフォーマンス測定 パフォーマンスを考慮するにあたり、プログラムが10000行の ログを出力する時間を、以下の4種類の方式について評価しまし た。

A方式  log4cxx(SocketAppender) + simplesocketserver
B方式  log4cxx(SyslogAppender) + syslogd
C方式  syslog(3)直呼び出し
参考   log4cxx(DailyRollingAPpender)

結果:

A方式: 1回目   2回目   3回目   AVG.
real   0.824   0.870   0.834   0.843
user   0.220   0.220   0.180   0.207
sys    0.010   0.020   0.040   0.023

B方式: 1回目   2回目   3回目   AVG.
real   8.384   8.240   8.360   8.328
user   0.730   0.570   0.710   0.670
sys    0.070   0.100   0.060   0.077

C方式: 1回目   2回目   3回目   AVG.
real  15.293  16.060  14.313  15.432
user   0.150   0.070   0.160   0.130
sys    0.050   0.050   0.060   0.053

参考 : 1回目   2回目   3回目   AVG.
real   0.496   0.496   0.503   0.498
user   0.410   0.440   0.400   0.417
sys    0.090   0.050   0.100   0.080

※ ただし、A方式にて使用したsimplesocketserverは 評価中にsegmentation faultを起こして落ちた。 また、プログラムを多量に起動させると、 simplesocketserverの使用するメモリ量が微量ながら 増えていき、減る気配が無い。

■ 3方式によるメリット/デメリット

A方式
 メリット
   ・アプリケーションを変更する必要がない
   ・パフォーマンスが良い
   ・同一環境にて複数実行する事ができる(開発効率が良い)
 デメリット
   ・simplesocketserverプロセスをアプリケーション数分
     起動/監視する必要がある
   ・simplesocketserver自体の動作に不安が残る
B方式
 メリット
   ・アプリケーションを変更する必要がない
   ・パフォーマンスは中間
   ・同一環境にて複数実行する事ができる(開発効率が良い)
 デメリット
   ・8つ以上のファイルパスを指定する事ができない
   ・ログ保存個数がシステム全体で同じ数になってしまう
   ・syslogdをドメインソケット方式で起動する必要がある
C方式
  メリット
   ・なし
  デメリット
   ・パフォーマンスが悪い
   ・ソースコードを変更する必要がある
   ・同一環境にて複数実行する事ができない(開発効率が悪い) 

log4jの読み込む順番

log4j1.2.9 では、log4j.configuration システムプロパティが未定義の場合、次の順序で設定を探します。

  1. スレッドコンテキストのクラスローダーを使用して、log4j.xml をロードします。
  2. “Logger” クラスをロードしたクラスローダーを使用して、log4j.xml をロードします。
  3. スレッドコンテキストのクラスローダーを使用して、lo4j.properties をロードします。
  4. “Logger” クラスをロードしたクラスローダーを使用して、log4j.properties をロードします。

FrontPage

Menu

Linux

サーバ構築

Windows

Java

Program

 

最新の20件

2008-04-02 2008-03-11 2008-01-28 2008-01-21 2007-11-27 2007-09-19 2007-06-07 2007-04-11 2007-04-06 2007-03-22 2006-12-20 2006-12-05 2006-12-04 2006-10-27 2006-09-22 2006-07-03
  • log4jメモ
2006-05-16