Log 4 jはレベル別にログを異なるファイル構成分析に出力する



LOG 4 Jがレベル別にログを出力、レベル別に異なるファイルに出力という説が多く、ネット上で最も多く貼られているlog 4 j.propertiesの設定はこうです
log4j.rootLogger=info,stdout,info,debug,error
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
 
log4j.logger.info=info
log4j.appender.info=org.apache.log4j.DailyRollingFileAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = INFO 
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log
 
log4j.logger.debug=debug
log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender
log4j.appender.debug.layout=org.apache.log4j.PatternLayout
log4j.appender.debug.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.debug.datePattern='.'yyyy-MM-dd
log4j.appender.debug.Threshold = DEBUG 
log4j.appender.debug.append=true
log4j.appender.debug.File=${webApp.root}/WEB-INF/logs/debug.log

log4j.logger.error=error
log4j.appender.error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.layout=org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.error.datePattern='.'yyyy-MM-dd
log4j.appender.error.Threshold = ERROR 
log4j.appender.error.append=true
log4j.appender.error.File=${webApp.root}/WEB-INF/logs/error.log 


 
実際には、このコードではLOG 4 Jレベルのファイルによるファイル出力は解決されません.
構成の重要な構成の説明は次のとおりです.
 
log4j.appender.debug.Threshold = INFO


INFOレベル以上のコンテンツを${webApp.root}/WEB-INF/logs/infoに出力する役割を果たす.ロゴの中だからinfo.logファイルにはERRORレベルのファイルが含まれています.
正しい解法は次のとおりです.
独自のAppenderクラスを定義し、DailyRollingFileAppenderを継承し、Thresholdの設定説明を書き換えます.
ソースコードの記載:
  public boolean isAsSevereAsThreshold(Priority priority)
    {
        return threshold == null || priority.isGreaterOrEqual(threshold);
    }

 
isAsSevereAsThreshold(Priority priority)メソッドの書き換え
public class LogAppender extends DailyRollingFileAppender {
 
 @Override
 public boolean isAsSevereAsThreshold(Priority priority) {
  //       ,       
  return this.getThreshold().equals(priority);
 }
}


 
このように,一意の判断を行い,Thresholdがpriorityと一致した場合にのみ出力を行い,真のLog 4 jがレベル別にログファイルを出力することを実現した.
log 4 j.propertiesでは、プロファイルを次のように変更します.
 
log4j.logger.info=info
log4j.appender.info=com.company.LogAppender
log4j.appender.info.layout=org.apache.log4j.PatternLayout
log4j.appender.info.layout.ConversionPattern=[%-5p] [%d{HH:mm:ss}] %c - %m%n
log4j.appender.info.datePattern='.'yyyy-MM-dd
log4j.appender.info.Threshold = INFO 
log4j.appender.info.append=true
log4j.appender.info.File=${webApp.root}/WEB-INF/logs/info.log

これで、ログ4 jに従って異なるファイルにログレベルで出力する機能が完了する.