source

서로 다른 메시지를 두 파일에 기록하기 위한 로그백

factcode 2022. 9. 1. 23:10
반응형

서로 다른 메시지를 두 파일에 기록하기 위한 로그백

logback/slf4j를 사용하여 로깅을 수행하고 있습니다.로그 파일을 해석하여 데이터를 분석하려고 합니다.따라서 (대부분이 debug 문으로 구성되어 있는) 큰 파일을 해석하는 대신 각각 다른 파일에 로그하는 로거 인스턴스를 2개(분석용과 전체 목적 로깅용)로 설정합니다.Logback이나 다른 로거로 이것이 가능한지 아는 사람이 있습니까?

로그백에서 이와 같은 작업을 수행할 수 있습니다.다음으로 설정 예를 나타냅니다.

<?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>

그런 다음 다음과 같은 분석 데이터를 기록하기 위한 로거와 모든 로거를 각각 2개씩 설정합니다.

Logger analytics = LoggerFactory.getLogger("analytics");

벌목꾼은 얼마든지 가질 수 있습니다.그러나 각 패키지에 대해 다르게 기록해야 하는 항목이 있는 것이 좋습니다.그러면 해당 패키지와 하위 패키지의 모든 클래스가 해당 특정 로거를 가져옵니다.모두 additivity="true"를 사용하여 루트 로거를 공유하고 로그 데이터를 루트 로거 앱엔더로 전송할 수 있습니다.다음은 예를 제시하겠습니다.

<?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>

내 경우, 나는 로그 이름으로 클래스 이름을 남기고 싶었다.

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

그리고 그런 수업을 거의 받지 못했기 때문에logback.xml

<!--additivity=false ensures this log data only goes to the this log, and no one more -->
<logger name="xxx.xxx.xxx.ScheduledPost" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.GcmPost" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>
<logger name="xxx.xxx.xxx.PushUtils" level="DEBUG" additivity="false">
    <appender-ref ref="ASYNC_SCHEDULE_LOG_FILE"/>
</logger>

언급URL : https://stackoverflow.com/questions/2488558/logback-to-log-different-messages-to-two-files

반응형