2014-12-19 4 views
2

내 응용 프로그램에 log4j2를 사용하고 싶습니다. ThreadContext에서 변수와 함께 RollingAppender를 사용하고 있습니다.log4j2가 로그 파일에 쓰지 않습니다.

여기 여기 내 log4j2.xml

<Configuration> 
<Appenders> 
    <Routing name="RoutingAppender"> 
     <Routes pattern="$${ctx:FlowName}"> 
      <Route> 
       <RollingFile name="Audit-${ctx:FlowName}" 
          fileName="logs/Audit-${ctx:FlowName}.log" 
          filePattern="logs/Audit-${ctx:FlowName}.%i.log.gz" 
          immediateFlush="true"> 
        <PatternLayout> 
         <pattern>"%m%n"<pattern/> 
        </PatternLayout> 

       <Policies> 
        <TimeBasedTriggeringPolicy interval="6" modulate="true" /> 
        <SizeBasedTriggeringPolicy size="10 MB" /> 
       </Policies> 
       </RollingFile> 
      </Route> 
     </Routes> 
     </Routing> 
</Appenders> 
<Loggers> 
    <Root level="trace"> 
     <appender-ref ref="RoutingAppender" level="info"/> 
    </Root> 
    <Logger name="AuditNippin" level="info" > 
     <AppenderRef ref="myRoutingAppender"/> 
    </Logger> 
</Loggers> 
</Configuration> 

인 자바 코드 :

package be.myApp; 
public class myClass{ 
    private static final org.apache.logging.log4j.core.Logger AUDITLOGGER = 
      (org.apache.logging.log4j.core.Logger) org.apache.logging.log4j.LogManager.getLogger("myRoutingAppender"); 

    public void doSomething(){ 
     ThreadContext.put("FlowName", "MyFlow"); 
     AUDITLOGGER.info("coucou"); 
     ThreadContext.remove("FlowName"); 
    } 
} 

이 파일이 제대로 문맥에 따라 생성한다. 그러나 로그 파일에 아무것도 쓰지 마십시오. 모든

+0

문제를 해결 했습니까? 나는 지금 같은 문제에 직면하고있다. –

답변

0

먼저 당신이 당신의 log4j2 XML의 구문 문제가 :

<이 </pattern>

< AppenderRef 심판 = "myRoutingAppender"해야/>

패턴/>

이 있어야한다 : 또한 <AppenderRef ref="RoutingAppender" />

, 당신이 당신의 RollingFile 펜더의 당신의 filePattern의 날짜 패턴이 있어야합니다 TimeBased 트리거 정책을 사용하고 있기 때문이다. documentation for RollingFileAppender을 참조하십시오. 당신은 아마 의미 >

< 패턴 > "% 분 %의 N"< 패턴/:

마지막으로, 당신은 아마 당신의 PatternLayout 당신의 패턴에서 인용을하지 않으 <pattern>%m%n<pattern/>

위의 내용을 모두 수정 한 후에는 로그 파일에 로그가 표시되지만 루트 로거가 표시되기 때문에 다음 코드가 실행될 때 :

LogManager.getLogger ("myRoutingAppender");

그 이름을 가진 로거가 없으므로 라우팅 로더를 사용하고 로그 파일에 쓰는 루트 로거를 얻게됩니다. 내 생각 엔 당신이 getLogger("AuditNippin")라고 부르기를 원한다. 설정 파일에서 지정한 유일한 로거이기 때문이다.