log4jは複数のカスタムログファイルを出力します
実際のアプリケーションに独立したログファイルを出力する必要がある場合、必要なコンテンツを元のログから分離して、別のログファイルを形成するにはどうすればよいですか?
まず、コンソールとtest.logファイルにログを記録する一般的なlog4j.propertiesファイルを見てみましょう。
コードコピーは次のとおりです。
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
同じクラスで複数のログファイルを出力する必要がある場合はどうなりますか?実際、真実は同じです。
コードコピーは次のとおりです。
private static log logger1 = logfactory.getlog( "mylogger1");
private static log logger2 = logfactory.getlog( "mylogger2");
log4j.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
さまざまなログを使用する必要があります(たとえば、logger1.info( "abc")は、test1.logへの出力に使用する必要があります)。
もう1つの問題は、これらのカスタムログがlog4j.rootloggerによって設定されたログに出力されていることです。心配しないでください、ここにスイッチがあります:
log4j.additivity mylogger1 = false
log4j.rootloggerによって設定されたログに同時に設定されている場合、それが他の場所に出力されないかどうかを設定するために使用されます。
ただし、この方法には小さな欠陥があります。つまり、印刷されたログのクラス名はmyloggerまたはmylogger2のみです。
2動的構成パス
プログラムに必要なログパスを常に変更する必要があり、毎回構成ファイルを変更することが不可能な場合は、環境変数を使用して解決できます。
log4jの構成は次のとおりです。
コードコピーは次のとおりです。
log4j.rootlogger = debug、infolog、debuglog
#infoログ
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ログ
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.setProperty( "log.dir"、logdir);
System.setProperty( "log.info.file"、infologfilename);
System.setProperty( "log.debug.file"、debuglogfilename);
添付ファイル:パターンパラメーターの形式の意味
%Cログ情報が属するクラスのフルネーム
%dログの時刻の日付または時刻は、次のような形式を指定できます。 :2013-8-19- 22:10:28
%fログ情報が属するクラスのクラス名
%l出力ログイベントが発生します。つまり、ログ情報を出力するというステートメントは、それが配置されているクラスの行のどの行であるかというステートメント
%mログのメッセージなど、コードで指定された情報を出力(メッセージ)
%nキャリッジリターンラインブレークを出力し、Windowsプラットフォームは「/r/n」、Unixプラットフォームは「/n」です
%p出力の優先度、つまりデバッグ、情報、警告、エラー、致命的。 debug()を呼び出して出力された場合、それはデバッグなどです
%r出力アプリケーションの開始から取得したミリ秒数を出力して、ログ情報を出力します
%tログイベントを生成するスレッド名を出力します