log 4 jログファイルの相対パス

2041 ワード

log 4 jのログファイルの保存経路をうまく解決できなかった.今日はちょうどまた出会った.比較的完璧な解決だ.
まずシーン:
1つのwebプロジェクトで、log 4 jを使ってログシステムをします.開発時のwebコンテナはjetty、生産環境はtomcat 5.5.
classesの下でlog 4 jを定義する.properties.
log4j.appender.A2=org.apache.log4j.RollingFileAppender

log4j.appender.A2.File=${dir}/logs/report.log

一般にdirをカスタマイズする、システムにdirの値を設定することができる.
Java-Ddir=xxxのような方式でない場合は、log 4 jをロードする必要がある.propertiesの前に設定します.
一般にListenerを用いる、Listenerのinitメソッドに設定.
この方式はjettyで実行可能である.tomcatで失敗しました.
これはtomcatがプロジェクトを起動するときにlog 4 jを優先的にロードするためである.propertiesファイルを実行してからListenerを実行します.
突然、tomcatはプロジェクトを開始すると、環境変数:catalinaを自動的に設定します.base
修正して
log4j.appender.A2.File=${catalina.base}/logs/report.log

次にListenerでこの変数が存在するかどうかを判断し、存在することを示す.tomcatでは、これ以上設定する必要はない.そうでなければ、設定経路はプロジェクトルート経路である
String key = "catalina.base";
if (System.getProperty(key) == null) {//  tomcat ,   
	String root = ctx.getRealPath("/");//       
	System.setProperty(key, root);
}

そうですか.tomcatに追加すると、tomcat/logsの下にログファイルが保存されます.Webapp/logsに保存しないと
 
典型的なlog 4 j構成を添付します
 
log4j.rootLogger=INFO, A1, A2

# A1 is set to be ConsoleAppender sending its output to System.out
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{HH:mm:ss} %-5p [%t] (%F:%L) %3x - %m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.Threshold=INFO
#log_dir\u5728AppListener\u4e2d\u83b7\u5f97\u5e76\u8bbe\u7f6e\u5982System
log4j.appender.A2.File=${catalina.base}/logs/web.log
log4j.appender.A2.Append=true
log4j.appender.A2.MaxFileSize=100KB
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5r %-5p [%t] %c{2}:%L - %m%n