Log 4 JはどのようにLogger出力を分けます

4079 ワード

詳細
今日2人の同僚とLog 4 jについて議論して、彼らはすべて1つの問題を解決しなければならなくて、どのように分けてLoggerを出力します.はっきり言えませんが、例を挙げてみましょう.
 
 
package com.gmail.at.ankyhe.log4jtest;

import org.apache.log4j.Logger;

public class ClassA {
	
	private static Logger logger = Logger.getLogger(ClassA.class.getName());
	
	public ClassA() {
		logger.info("ENTER ClassA()");
	}
	
	public void foo() {
		logger.info("foo()");
		bar();
	}
	
	public void bar() {
		Logger myLog = Logger.getLogger("bar");
		myLog.debug("bar()D");
		myLog.info("bar()I");
	}

}

barが1つの場所に出力され、他のloggerが1つの場所に出力されることを望んでいます.一般的なプロファイルは次のとおりです.
 





  
    
      
    
  

    
    
    
    
    
      
    
  


  
     
     
  
  
  
    
    
  


これにより、myLogの出力がファイルにあり、端末にあるという問題が発見されます.理由はLog 4 J公式のIntroductionで明らかにされています.
http://logging.apache.org/log4j/1.2/manual.htmlAppender Additivityの検索デフォルトではbarがrootの出力を統合すると説明します.原因が分かったら、どうやって修正すれば簡単ですか.
 





  
    
      
    
  

    
    
    
    
    
      
    
  


  
     
     
  
  
  
    
    
  


唯一の違いはbarのロゴの後ろにadditivity=「false」が付いていることです.やってみましたが、要求通りに仕事ができます.これはxmlの構成です.一般的なpropertyの構成は次のとおりです.
 
log4j.rootLogger=DEBUG, FA
log4j.category.bar = INFO, CA
log4j.additivity.bar = false

#Console Appender

log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=property.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n