2010-03-21 5 views
108

로그 기록을 수행하기 위해 logback/slf4j를 사용하고 있습니다. 내 로그 파일을 분석하여 일부 데이터를 분석하고 싶기 때문에 큰 파일 (주로 디버그 문으로 구성)을 구문 분석하는 대신 각 파일을 별도의 파일에 기록하는 두 개의 로거 인스턴스를 갖고 싶습니다. 하나는 분석 용이고 다른 하나는 모든 용도 로깅 용입니다. Logback이나 다른 Logger로 가능하다면 누구나 알고 있습니까?다른 메시지를 두 개의 파일로 기록하는 로그백

답변

223

로그백에서 이와 같은 작업을 수행 할 수 있습니다. 다음은 예제 구성입니다 : 다음

<?xml version="1.0"?> 
<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>logfile.log</file> 
     <append>true</append> 
     <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
     </encoder> 
    </appender> 
    <appender name="ANALYTICS-FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>analytics.log</file> 
     <append>true</append> 
     <encoder> 
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg %n</pattern> 
     </encoder> 
    </appender> 
    <!-- additivity=false ensures analytics data only goes to the analytics log --> 
    <logger name="analytics" level="DEBUG" additivity="false"> 
     <appender-ref ref="ANALYTICS-FILE"/> 
    </logger> 
    <root> 
     <appender-ref ref="FILE"/> 
    </root> 
</configuration> 

당신이 설정했던 두 개의 별도의 로거, 모두를위한 하나 하나가과 같이 분석 데이터를 기록 할 수 :

내 경우에는
Logger analytics = LoggerFactory.getLogger("analytics"); 
+1

나는 내가없는 줄 바꿈 펜더와 같은 파일에 정기적으로 펜더를 가질 수 있도록 이런 종류의 일을 할 필요가있다. 이 정보를 가져 주셔서 감사합니다. – djangofan

+0

다른 appender-ref가 지정되면 IMO additivity = false가 기본값이어야합니다. 일부 타이머 이벤트로 인해 일부 모듈이 매우 자주 로그 생성기가 될 수있는 응용 프로그램을 매우 자주 사용하며 이러한 로그를 다른 파일로 분리하려고합니다. 동일한 로그를 10 개의 다른 파일에 로깅하는 것은 실제로 이해가 가지 않습니다. 따라서 기본적으로 선택하지 않아야합니다. Logback이 다시 작성 되었기 때문에 동일한 작성자가 동일한 오류를 수정해야합니다. –

+0

각각 다른 파일에 오류, 디버그, 정보 메시지를 기록하고 싶습니다. logback.xml로 가능합니까? – Qasim

1

내가 같은 클래스 이름을두고 싶었다 이름

private static final Logger log = LoggerFactory.getLogger(ScheduledPost.class); 

를 기록하고 나는 몇 등의 수업을했다, 그래서 내 logbook.xml

1

원하는만큼 로거를 가질 수 있습니다. 그러나 각 패키지별로 하나씩 다른 방식으로 기록해야합니다. 그런 다음 해당 패키지와 해당 하위 패키지의 모든 클래스가 특정 로거를 가져옵니다. 이들은 모두 루트 로거를 공유하고 additivity = "true"를 사용하여 루트 로거 appender로 로그 데이터를 보낼 수 있습니다. 다음 예는 다음과 같습니다

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

<property name="pattern" value="%date{HH:mm:ss.SSS} %-5p %logger{36} 
%X{akkaSource} [%file:%line] - %m%n" /> 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%date{HH:mm:ss.SSS} %-5p %logger{36} %X{akkaSource} [%file:%line] - %m%n</pattern> 
    </encoder> 
</appender> 

<appender name="abc" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${catalina.base}/logs/worker.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${catalina.base}/logs/worker-%d{yyyy-MM-dd_HH}.log</fileNamePattern> 
     <maxHistory>360</maxHistory> 
    </rollingPolicy> 
    <encoder> 
     <pattern>${pattern}</pattern> 
    </encoder> 
</appender> 

<appender name="xyz" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${catalina.base}/logs/transformer.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${catalina.base}/logs/transformer-%d{yyyy-MM-dd_HH}.log</fileNamePattern> 
     <maxHistory>360</maxHistory> 
    </rollingPolicy> 
    <encoder> 
     <pattern>${pattern}</pattern> 
    </encoder> 
</appender> 

<logger name="com.xxx.yyy.zzz" level="INFO" additivity="true"> 
    <appender-ref ref="xyz"/> 
</logger> 

<logger name="com.aaa.bbb.ccc" level="INFO" additivity="true"> 
    <appender-ref ref="abc"/> 
</logger> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="STDOUT" /> 
</root> 

관련 문제