2013-07-24 5 views
1

지금은 사용하고 구조 : 이 appender :log4j2 (xml의 MDC)를 사용하여 다른 파일에 다른 로그를 쓰는 방법은 무엇입니까? 이 같은

<RollingFile name="user.log" append="true" fileName="users/%MDC{USERNAME}.txt" 
       filePattern="users/archive/%MDC{USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz"> 
     <PatternLayout pattern="%-5p %d{MMMM-dd HH:mm:ss} %X: %c - %m%n"/> 
     <Policies> 
      <TimeBasedTriggeringPolicy/> 
      <SizeBasedTriggeringPolicy size="50 MB"/> 
     </Policies> 
    </RollingFile> 

로거 :

<appender-ref ref="user.log"> 
     <ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY" operator="or"> 
      <KeyValuePair key="USERNAME" value="%X{USERNAME}"/> 
      <KeyValuePair key="IP" value="%X{IP}"/> 
     </ThreadContextMapFilter> 
    </appender-ref> 

는 그러나 MDC 키가 작동하지 않습니다. 어떻게하면 RollingFileAppender를 설정하기 위해 XML에서 MDC 키를 사용할 수 있습니까?

답변

5

RoutingAppender를 살펴보십시오. 아마도 이것은 당신을 시작할 수 있습니다 :

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="DEBUG" name="MyApp" packages=""> 
    <appenders> 
    <Routing name="Routing"> 
     <Routes pattern="$${ctx:USERNAME}"> 
     <Route> 
      <RollingFile name="user.log" append="true" fileName="users/${ctx:USERNAME}.txt" 
      filePattern="users/archive/${ctx:USERNAME}-%d{MM-dd-yyyy}-%i.txt.gz"> 
      <PatternLayout> 
       <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy/> 
       <SizeBasedTriggeringPolicy size="50 MB"/> 
      </Policies> 
      </RollingFile> 
     </Route> 
     </Routes> 
    </Routing> 
    </appenders> 

    <loggers> 
    <root level="TRACE"> 
     <appender-ref ref="Routing" level="DEBUG" /> 
    </root> 
    </loggers> 
</configuration> 
+0

대단히 고마워요. 하지만 너무 늦었습니다. 이미이 솔루션을 혼자서 찾았습니다. 아무튼 감사 해요!) – ruslanys