2013-12-16 4 views
1

log4j 2.0-beta9를 사용하고 있습니다. SMTP 첨부 자에 대한 질문이 있습니다. 주제와 속성 값을 설정해야합니다. MapMessage를 로깅하고 있습니다. 내 설정은 아래와 같습니다. -log4j2의 런타임에 등록 정보에서 대상 값을 설정합니다. SMTPAppender

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="DEBUG"> 

    <appenders> 
     <Console name="Console" target="SYSTEM_OUT"> 
      <PatternLayout pattern="%d [%t] %-5p %c - %m%n"/> 
     </Console> 

     <SMTP name="Mail" subject="Error Log for ${env:HOSTNAME}" to="${sys:mail.to}" from="${sys:mail.from}" 
       smtpHost="${sys:mail.host}" smtpPort="${sys:mail.port}" smtpDebug="true" bufferSize="1"> 
      <PatternLayout> 
       <pattern>%d [%t] %-5p %c - %m%n</pattern> 
      </PatternLayout> 
     </SMTP> 

     <Async name="AsyncMail"> 
      <appender-ref ref="Mail" /> 
     </Async> 
    </appenders> 

    <loggers> 
     <root level="info"> 
      <appender-ref ref="Console"/> 
      <appender-ref ref="AsyncMail"> 
       <MapFilter onMatch="ACCEPT" onMismatch="DENY"> 
        <KeyValuePair key="throwable.class" value="java.lang.RuntimeException" /> 
       </MapFilter> 
      </appender-ref> 
     </root> 
    </loggers> 
</configuration> 


// Java Code to log the msg 
Throwable throwable; // this is the exception that is thrown by the app. 
MapMessage message = new MapMessage(); 
message.put("throwable.message", throwable.getMessage()); 
message.put("throwable.class", throwable.getClass().getName()); 
message.put("throwable.stacktrace", ExceptionUtils.getStackTrace(throwable)); // ExceptionUtils from apache-commons 
LOGGER.error(message, throwable); // org.apache.logging.log4j.Logger 

이 값들은 동적으로 대체되지 않습니다. 이 일을 할 수있는 방법이 있습니까?

미리 감사드립니다.

답변

1

mail.tomail.from 시스템 속성을 설정해야합니다. 현재 Servlet 3.0 환경에서 실행 중일 수 있습니다.이 경우 Log4j2.xml 파일이 처리되기 전에 속성을 설정하는 코드가 실행됩니다.

그런 경우 Log2j의 서블릿 컨테이너 초기화 프로그램이로드되기 전에 web.xml 파일에서 구성한 서블릿 컨테이너 초기화 프로그램을로드하여로드 할 수 있습니다.