javaカスタムログ出力ファイル(log 4 jログファイル出力複数のカスタムログファイル)

3971 ワード

log 4 jは複数のカスタムログファイルを出力しますが、実際のアプリケーションで独立したログファイルを出力する必要がある場合、必要な内容を元のログから分離して、単独のログファイルを形成するにはどうすればいいですか?
まず一般的なロゴ4 j.propertiesファイルを見てください。コンソールとtest.logファイルにログを記録しています。
 
  
log4j.rootLogger=DEBUG, stdout, logfile 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

同じクラスで複数のログファイルを出力する必要がありますか?実は道理は同じです。まずTest.javaで定義します。
 
  
private static Log logger1 = LogFactory.getLog("mylogger1");

private static Log logger2 = LogFactory.getLog("mylogger2");

log 4 j.propertiesでは、以下のように構成されています。
 
  
log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

異なるログは、test 1.logに出力する場合は、logger 1.info(abc)を使用します。
もう一つの問題があります。これらのユーザー定義のログはデフォルトではlog 4 j.root Loggarに設定されたログに同時に出力されます。どうやって自分の指定したログに出力することができますか?焦らないでください。ここにスイッチがあります。
log 4 j.additivity.mylogger 1=false
ロゴ4 j.rootLoggerが設定したログに同時に出力するかどうかを設定します。falseとしては他のところに出力されません。
しかし、このような方法には小さな欠陥があります。それはプリントしたログのクラス名はmyloggerまたはmylogger 2だけです。
2動的配置パスは、プログラムに必要なログパスが継続的に変化する必要がある場合、設定ファイルを毎回変更することが不可能である場合、環境変数を利用して解決することができる。
ロゴ4 jの構成は以下の通りです。
 
  
log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG

#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

この場合、ログを使用してログを印刷する前に、Systemでログの出力経路とファイル名を定義する環境変数が必要です。
 
  
System.setProperty(“log.dir”, logDir);

System.setProperty(“log.info.file”, infoLogFileName);

System.setProperty(“log.debug.file”, debugLogFileName);

付:Patternパラメータのフォーマット意味
%c出力ログ情報が属するクラスのフルネーム
%d出力ログポイントの日付または時間は、デフォルトのフォーマットはISO 8601であり、その後にフォーマットを指定することもできます。例えば%d{yy-M-dd HH:mm:ss}、出力は同様です。2013-8-19-22:28
%f出力ログ情報が属するクラスの名前
%l出力ログイベントの発生位置、すなわちログ情報を出力する文はそのカテゴリーの何行目にありますか?
%m出力コードに指定されたメッセージ、例えばロゴのメッセージ
%nは折り返しを出力します。Windowsプラットフォームは「/r/n」、Unixプラットフォームは「/n」です。
%p出力優先度はDEBUG、INFO、WARN、ERROR、FATALです。debug()を呼び出して出力した場合はDEBUGとなり、これに類推します。
%rはアプリケーション起動からログ情報出力までのミリ秒数を入力します。
%t出力このログイベントを生成するスレッド名