2014-09-29 2 views
3

내 응용 프로그램에서 log4j2를 사용하고 있습니다.log4j2로 한 수준 만 기록하는 방법은 무엇입니까?

내가 원하는 것은 콘솔에 갈 때까지 '디버그', myapp.log로 이동하려면 '정보'까지만, 'myapp-audit.log'로 이동하는 경우에만 '정보'까지입니다.

이유는 정보가 대부분 성공적인 데이터 수정 (예 : '사용자 생성', '사용자 업데이트', '사용자 삭제'등)로 구성되기 때문입니다. If는 사실상 데이터 수정의 감사 로그입니다.

하지만 어떻게 할 지 알아낼 수는 없습니다.

'myapp-audit.log'에 '정보'만 기록하려면 어떻게해야합니까? 오류, 치명적, 경고 - 여기 당신은 info 수준이 모든 것을 "위"를 포함 직접하기 때문에 할 수 없어

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="WARN"> 
    <appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 

     <File name="LogFile" fileName="myapp.log"> 
      <PatternLayout 
       pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </File> 

     <File name="AuditFile" fileName="myapp-audit.log"> 
      <PatternLayout 
       pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> 
     </File> 
    </appenders> 

    <loggers> 
     <root level="debug"> 
      <appender-ref ref="Console" level="debug" /> 
      <appender-ref ref="LogFile" level="info" /> 
      <appender-ref ref="AuditFile" level="info" /> <!-- I want ONLY 'info' here --> 
     </root> 
    </loggers> 
</configuration> 

답변

5

appender-ref에 INFO를 지정하면 appender는 INFO, WARN, ERROR 및 FATAL 이벤트를 수신합니다.

<File name="AuditFile" fileName="myapp-audit.log"> 
    <PatternLayout 
     pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%nZ" /> 
    <Filters> 

     <!-- First deny warn, error and fatal messages --> 
     <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/> 
     <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> 
     <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/> 

     <!-- Then accept info, warn, error, fatal and deny debug/trace --> 
     <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> 
    </Filters> 
</File> 
+0

그들은 또한 *에 대한 임계 값 필터에 의해 일치하고 있기 때문에 * 오류 * 치명적인 * * 여기에 대한 필터에 대한 필요가 없습니다 : 당신은 또한, ERROR 및 FATAL 수준의 이벤트를 WARN 필터링 만 정보를 제한 할 수 있습니다 경고 *. – Raniz

0

내 현재의 구성은 ...입니다. 할 수있는 일은 별도의 감사 로거를 만드는 것입니다. XML에서

Logger log = LogManager.getLogger("audit"); 

: 수업 시간에

<Logger name="audit" level="info"> 
    <Appender-ref ref="AuditFile" level="info" /> 
</Logger> 

또는 당신이 사용할 수있는 RoutingAppender (당신이 ThreadContext가 아닌 다른 사용할 수 있습니다)에

ThreadContext.put("ROUTINGFLAG", "audit"); 
log.info("..."); 
ThreadContext.remove("ROUTINGFLAG"); 

을 the xml :

... 
    <Routing name="Routing"> 
     <Routes pattern="$${ctx:ROUTINGFLAG}"> 
      <Route AppenderRef="LogFile"/>    
      <Route AppenderRef="AuditFile" key="audit"/>     
     </Routes> 
    </Routing> 
</Appenders> 
<Loggers> 
    <Root level="debug"> 
     <Appender-ref ref="Console" level="debug"/> 
     <AppenderRef ref="Routing" level="info"/> 
    </Root> 
</Loggers> 
관련 문제