Log 4 j異なるレベルで異なるファイルに出力するいくつかの方法
log 4 jはもう骨董品ですが、今はプロジェクトがまだ使われていて、異なるレベルで異なるファイルに出力する必要があるので、いくつかの実現方法を記録して、忘れません!以下のいくつかの配置はpropertiesを使用する場合であるが、xmlの原理も同様である. LevelRangeFilter を使用 LevelMatchFilter を使用カスタムAppenderは最後に次の必要なプロファイルを貼り付けます. プロジェクトinfoとerrorレベルログはそれぞれallInfoとして記録され、allErrorファイル Aモジュールのログがafile として個別に記録される Aモジュールのinfoレベルログはafileでのみ記録され、allinfoでは記録されない(infoは1回のみ記録される) Aモジュールのerrorレベルログがafile、allErrorに記録されている 次の詳細は、です.
1.LevelRangeFilterの使用
これは3種類の中で一番便利なはずですが、配置は以下の通りです.
ここでThresholdで指定する出力レベルはINFOですが、デフォルトではINFOより大きいものも出力します.以下に追加するfilterは最大レベルと最小レベルを指定し、いずれもINFOなので、最終的にはINFOレベルしか出力しません.
2.LevelMatchFilterの使用
この構成は少し多いです.例えば、INFOレベルを出力するには、次の構成が必要です.
ここで注意すべきは、マッチングレベルINFOがtrueであることを指定する後、他のレベルをfalseに設定する必要がある、そうでない場合、他のレベルは出力(Thresholdより指定されたレベルを含む)である.
3.カスタムアプリケーション
一般的なプロファイルは次のとおりです.
ここではThresholdによりレベルを指定するが、デフォルトのインプリメンテーションは指定レベル以上の出力を行うので、このデフォルトインプリメンテーションを変更することができる.
次に、プロファイルでカスタムクラスを使用します.
これでいいです.
もちろん、上記の3つの方法のほかに、異なるレベルで異なるファイルを指すクラスをカスタマイズする方法もあります.
方法はたくさんあるから、一番簡単なものを探せばいい.
最後に、次の必要なプロファイルを貼り付けます.1.プロジェクトinfoとerrorレベルのログはallInfoに別々に記録され、allErrorファイル2.Aモジュールのログはafileに単独で記録されます.3.Aモジュールのinfoレベルのログはafileにのみ記録され、allinfoには記録されません.4.Aモジュールのerrorレベルのログはafileに記録され、Erallrorに記録されます.
コードにAモジュールの個別出力を用いると、
1.LevelRangeFilterの使用
これは3種類の中で一番便利なはずですが、配置は以下の通りです.
log4j.appender.InfoFile = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile.File = logs/info1.log
log4j.appender.InfoFile.MaxFileSize = 10MB
log4j.appender.InfoFile.Threshold = INFO
log4j.appender.InfoFile.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.InfoFile.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.InfoFile.filter.F1.LevelMin=INFO
log4j.appender.InfoFile.filter.F1.LevelMax=INFO
ここでThresholdで指定する出力レベルはINFOですが、デフォルトではINFOより大きいものも出力します.以下に追加するfilterは最大レベルと最小レベルを指定し、いずれもINFOなので、最終的にはINFOレベルしか出力しません.
2.LevelMatchFilterの使用
この構成は少し多いです.例えば、INFOレベルを出力するには、次の構成が必要です.
log4j.appender.InfoFile2 = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile2.File = logs/info2.log
log4j.appender.InfoFile2.MaxFileSize = 10MB
log4j.appender.InfoFile2.Threshold = INFO
log4j.appender.InfoFile2.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile2.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.InfoFile2.filter.F1=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F1.levelToMatch=INFO
log4j.appender.InfoFile2.filter.F1.AcceptOnMatch=true
log4j.appender.InfoFile2.filter.F2=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F2.levelToMatch=ERROR
log4j.appender.InfoFile2.filter.F2.AcceptOnMatch=false
log4j.appender.InfoFile2.filter.F3=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F3.levelToMatch=WARN
log4j.appender.InfoFile2.filter.F3.AcceptOnMatch=false
log4j.appender.InfoFile2.filter.F4=org.apache.log4j.varia.LevelMatchFilter
log4j.appender.InfoFile2.filter.F4.levelToMatch=DEBUG
log4j.appender.InfoFile2.filter.F4.AcceptOnMatch=false
ここで注意すべきは、マッチングレベルINFOがtrueであることを指定する後、他のレベルをfalseに設定する必要がある、そうでない場合、他のレベルは出力(Thresholdより指定されたレベルを含む)である.
3.カスタムアプリケーション
一般的なプロファイルは次のとおりです.
log4j.rootLogger=INFO,InfoFile3,errorFile3
log4j.appender.InfoFile3 = org.apache.log4j.RollingFileAppender
log4j.appender.InfoFile3.File = logs/info3.log
log4j.appender.InfoFile3.MaxFileSize = 10MB
log4j.appender.InfoFile3.Threshold = INFO
log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.errorFile3 = org.apache.log4j.RollingFileAppender
log4j.appender.errorFile3.File = logs/error3.log
log4j.appender.errorFile3.MaxFileSize = 10MB
log4j.appender.errorFile3.Threshold = ERROR
log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
ここではThresholdによりレベルを指定するが、デフォルトのインプリメンテーションは指定レベル以上の出力を行うので、このデフォルトインプリメンテーションを変更することができる.
package com.dingcheng.log;
import org.apache.log4j.Priority;
import org.apache.log4j.RollingFileAppender;
public class MyRollingFileAppender extends RollingFileAppender {
@Override
public boolean isAsSevereAsThreshold(Priority priority) {
return this.getThreshold().equals(priority);
}
}
次に、プロファイルでカスタムクラスを使用します.
log4j.rootLogger=INFO,InfoFile3,errorFile3
log4j.appender.InfoFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.InfoFile3.File = logs/info3.log
log4j.appender.InfoFile3.MaxFileSize = 10MB
log4j.appender.InfoFile3.Threshold = INFO
log4j.appender.InfoFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.InfoFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
log4j.appender.errorFile3 = com.dingcheng.log.MyRollingFileAppender
log4j.appender.errorFile3.File = logs/error3.log
log4j.appender.errorFile3.MaxFileSize = 10MB
log4j.appender.errorFile3.Threshold = ERROR
log4j.appender.errorFile3.layout = org.apache.log4j.PatternLayout
log4j.appender.errorFile3.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n
これでいいです.
もちろん、上記の3つの方法のほかに、異なるレベルで異なるファイルを指すクラスをカスタマイズする方法もあります.
public class LogUtil{
public static void error(String msg) {
Logger.getLogger("error").error(msg);
}
}
方法はたくさんあるから、一番簡単なものを探せばいい.
最後に、次の必要なプロファイルを貼り付けます.1.プロジェクトinfoとerrorレベルのログはallInfoに別々に記録され、allErrorファイル2.Aモジュールのログはafileに単独で記録されます.3.Aモジュールのinfoレベルのログはafileにのみ記録され、allinfoには記録されません.4.Aモジュールのerrorレベルのログはafileに記録され、Erallrorに記録されます.
# , info , allInfo,allError
log4j.rootLogger=INFO,allInfo,allError
# allInfo , info
log4j.appender.allInfo = org.apache.log4j.RollingFileAppender
log4j.appender.allInfo.File = /logs/allInfo.log
log4j.appender.allInfo.MaxFileSize = 50MB
log4j.appender.allInfo.Threshold = INFO
log4j.appender.allInfo.layout = org.apache.log4j.PatternLayout
log4j.appender.allInfo.layout.ConversionPattern =[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n
log4j.appender.allInfo.filter.F1=org.apache.log4j.varia.LevelRangeFilter
log4j.appender.allInfo.filter.F1.LevelMin=INFO
log4j.appender.allInfo.filter.F1.LevelMax=INFO
# allError , error
log4j.appender.allError = org.apache.log4j.RollingFileAppender
log4j.appender.allError.File = /data/wuliu-provider/logs/order-error.log
log4j.appender.allError.MaxFileSize = 50MB
log4j.appender.allError.Threshold = ERROR
log4j.appender.allError.layout = org.apache.log4j.PatternLayout
log4j.appender.allError.layout.ConversionPattern=[%p] %-d{yyyy-MM-dd HH:mm:ss} [%t] [%l]--> %m %x %n
#A , INFO, afile,allError ; additivity=false
log4j.logger.AMODULE=INFO,afile,allError
log4j.additivity.AMODULE = false
log4j.appender.afile = org.apache.log4j.RollingFileAppender
log4j.appender.afile.File = /data/wuliu-provider/logs/YuanCheng.log
log4j.appender.afile.MaxFileSize = 50MB
log4j.appender.afile.Threshold = INFO
log4j.appender.afile.layout = org.apache.log4j.PatternLayout
log4j.appender.afile.layout.ConversionPattern =[%p] %d{yyyy-MM-dd HH\:mm\:ss} [%c]%m%n
コードにAモジュールの個別出力を用いると、
private static Logger logger = Logger.getLogger("AMODULE");//