2014-12-08 1 views
0

현재 서로 다른 용도로 2 개의 로그 파일을 생성하는 응용 프로그램을 작성 중입니다. 내가 log4j2를 처음 사용하기 때문에, 나는 그것을 달성 할 수 없다. 다음은 구성 파일 (log4j2.xml)입니다.log4j2를 사용하여 다른 로그 파일에 데이터를 기록 하시겠습니까?

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration status="WARN"> 
    <Properties> 
     <Property name="log-path">C:/Users/460681/Desktop/SourceFiles</Property> 
    </Properties> 
    <Appenders> 
     <Console name="console-log" target="SYSTEM_OUT"> 
     <PatternLayout 
      pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> 
     </Console> 
     <RollingFile name="info-log" fileName="${log-path}/SplunkOADC.log" 
     filePattern="${log-path}/SplunkOADC-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern> %d{yyyy-MM-dd HH:mm:ss.SSS} - %msg%n 
      </pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" 
      modulate="true" /> 
     </Policies> 
     <Filters> 
      <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="trace" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> 
     </Filters> 
     </RollingFile> 
     <RollingFile name="error-log" fileName="${log-path}/SplunkOADC-error.log" 
      filePattern="${log-path}/SplunkOADC-error-%d{yyyy-MM-dd}.log"> 
     <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
      </pattern> 
     </PatternLayout> 
     <Policies> 
      <TimeBasedTriggeringPolicy interval="1" 
       modulate="true" /> 
     </Policies> 
     <Filters> 
      <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> 
      <ThresholdFilter level="trace" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> 
     </Filters> 
     </RollingFile> 
     <RollingFile name="trace-log" fileName="${log-path}/SplunkOADC-trace.log" 
      filePattern="${log-path}/SplunkOADC-trace-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
      <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n 
      </pattern> 
      </PatternLayout> 
      <Policies> 
      <TimeBasedTriggeringPolicy interval="1" 
       modulate="true" /> 
      </Policies> 
      <Filters> 
      <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/> 
      <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/> 
      <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/> 
      </Filters> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Root level="debug"> 
     <AppenderRef ref="info-log" level="info"/> 
     <AppenderRef ref="trace-log" level="trace"/> 
     </Root> 
    </Loggers> 
    </Configuration> 

필자는 필터를 사용했지만 올바른 방법인지 잘 모르겠습니다. 여기

logger.entry("Enter The app"); 
String report_index_data = 
     "select REPORT_MODE, INDEX_ID from TABLE_NAME"; 
ResultSet rs = db.selectQuery(report_index_data, conn); 
while(rs.next()){ 
logger.info("report_index_data =" +rs.getString("report_index_data")); 
} 
logger.exit(); 

감사를 log4j2

를 사용하여 로그인하려고 내 자바 방법입니다!

+0

실제로 어떤 현상이 발생합니까? 로그가 전혀 없습니까? –

+0

예 세 개의 로그를 모두 가져 오지만 그 중 아무 것도 데이터를 가지고 있지 않습니다. 때로 루트 수준을 추적하도록 변경하면 모든 데이터가 추적 로그에 기록됩니다. –

답변

1

새로운 로거를 구성에 추가하십시오.

<root level="debug"> 
     <appender-ref ref="info-log" level="info"/> 
    </root> 

    <logger name="logger2"> 
    <AppenderRef ref="trace-log" level="trace"/> 
    </logger> 
0

먼저 루트 로거 수준이 디버그이면 추적 수준 로그 이벤트를 해당 추가 기능 중 하나에 보내지 않습니다. 그것의 appender에 대해서만 레벨 이상의 로그 이벤트를 디버깅 할 것입니다.

두 번째로 코드는 logger.entry()logger.exit()을 사용합니다. 이러한 방법을 유용하게 사용하려면 pattern layout에 패턴의 % location 또는 % method와 같은 위치 패턴을 사용해야합니다. (예 : [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1}.%M - %msg%n). 입력/나가는 방법의 이름이 표시됩니다. 위치 정보를 계산할 때 일부는 performance impact입니다.