2011-08-09 5 views
4

log4j 로거를 동적으로 구성 할 수있는 방법이 있습니까? 각 클래스 인스턴스를 다른 파일에 쓰고 싶습니다. (인스턴스간에 고유 한 속성을 말합니다). XML 구성에서 파일을 제외한 모든 것을 구성한 다음 각 인스턴스에 대해 파일을 설정하려고합니다.Log4J 동적 구성

log4j를 사용하여이를 수행 할 수있는 방법이 있습니까?

+0

잘 모르겠지만 각 클래스에 대해 Appender를 만들고 싶습니다. 각 클래스의 로거를 클래스 이름으로 인스턴스화해야합니다. 나는 당신이 많은 프로젝트를 끝내기 때문에 너무 많은 수업을 가지지 않기를 바란다. .log – Cygnusx1

+0

나는이 수업을 원한다. 그 수업에는 몇 가지 사례가있다. 각 인스턴스에는 고유 한 ID가 있습니다. 각 인스턴스가 ID.log 파일을 말하도록 작성하고 싶습니다. – user182945

답변

7

여러분의 의견대로, 여기 내가 시도 할 것입니다.

앱의 시작 부분에 10 개의 인스턴스를 생성한다고 상상해보십시오. 어쨌든. 이름으로 당신의 log4j.xml에서

, 정의 10 펜더는 = yourUniqueId (이 고유 ID는 종류의 하드 코딩됩니다)

는 yourUniqueid.log

에서 다음
<logger name="yourUniqueId" additivity="false"> 
    <level value="INFO" /> 
    <appender-ref ref="fileAppender" /> 
</logger> 

<appender name="fileAppender" class="org.apache.log4j.FileAppender"> 
<param name="File" value="/path/yourfile.log"/> 

    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d{dd MM yyyy HH:mm:ss,SSS} %m%n"/> 
    </layout> 
</appender> 

에 기록 펜더 다음을 확인하여 객체 생성자. 객체 고유 ID를 사용하여 올바른 Logger를 인스턴스화합니다. 그런

뭔가 :

public MyClassContructor(){ 
    String uniqueId = getMyUniqueIdFromSomewhere(); 
    logger = Logger.getLogger(uniqueId); 
} 

당신이 주위의 log4j.xml과 혼란에 원하지 않는 생각은, 당신은 당신의 고유 ID

을 기반으로하여 log4j API를 사용하여 자신의 펜더를 만들 것 이 같은

뭔가 :

public class YourClass{ 
Logger logger = Logger.getLogger(YourClass.class); 
SimpleLayout layout = new SimpleLayout(); 
FileAppender appender = null; 

public YourClass() { 
    try { 
     appender = new FileAppender(layout, "/path/tolog/yourUniqueId.log", false); 
     logger.addAppender(appender); 

     logger.setLevel((Level) Level.DEBUG); 

    } 
    catch(IOException e) { 
     e.printStackTrace(); 
     logger.error("Printing ERROR Statements",e); 
    } 
} 

YourClass의 각 인스턴스가 다른 로그 파일에 쓸 것입니다 이런 식으로. 당신이해야 할 일은 생성자를 호출 할 때이 uniqueId를 얻는 방법을 생각하는 것입니다.

희망이 있습니다.