log4j 설정이 일부 적용되지 않습니다.

조회수 884회

안녕하세요

현재 프로젝트에서 log4j를 사용하고 있는데.

로그 레벨을 info와 debug를 각각 다른 파일로 분리하기위해서 작업중입니다.

문제는 일부 설정은 적용이 되고, 일부는 적용이 안되는것 같습니다.

새로 설정한 Log파일은 생성 되지만. 실제 로그는 찍히지 않아요 (debug 레벨만 필터링 했음에도. 적용이 안됨)

아래는 현재 설정된 값 들입니다.


<appender name="dailyfile_server" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="encoding" value="euc-kr" />
    <param name="Threshold" value="DEBUG"/>
    <param name="File" value="./logs/kt_tsdn_controller.log"/>
    <param name="DatePattern" value=".yyyy-MM-dd"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-5p | %m%n" />
    </layout>
</appender>

위 설정은 info 레벨 이상의 로그를 떨구기위한 설정입니다. ( 기존에 적용되 있는거라 잘 동작 )

<appender name="nbi_dev_debug" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="encoding" value="euc-kr" />
    <param name="File" value="./logs/kt_tsdn_nbidebug.log"/>
    <param name="DatePattern" value=".yyyy-MM-dd"/>
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-5p | %m%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelMatchFilter">
        <param name="LevelToMatch" value="debug"/>
        <param name="AcceptOnMatch" value="true"/>
    </filter>
</appender>

이건 현재 debug 로그만 필터링하기 위해 새로 추가한 설정입니다.

( log파일은 생성 되있으나, 적용한 필터는 동작을 안함 )


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger logger = LoggerFactory.getLogger(DesignCommandRPCTest.class);

실제 소스상에 Logger는 "org.slf4j.Logger" 로 생성되어 있습니다.

필터를 적용하고자 하는 부분은

<logger name="com.union">
    <level value="debug"/>
</logger>

입니다.

root 설정은 다음과 같습니다.

<root>
    <level value="debug"/>
    <appender-ref ref="dailyfile_error" />
    <appender-ref ref="dailyfile_server" />
    <appender-ref ref="nbi_dev_debug" />
    <appender-ref ref="console" />
</root>

문제 해결은 어떻게 해결은 했는데. 만족스럽지가 않습니다.

해결 방법은 log4j 클래스로 생성하는 새로운 logger 객체를 추가로 생성하면 되는것인데..

불필요하게 logger 객체가 두개나 있어야 한다는 점 별로 맘에 들지 않습니다.

또한, log 메소드 파라메터도 상이해서 불편합니다.

private static final org.apache.log4j.Logger newlogger = org.apache.log4j.Logger.getLogger(DesignCommandRPCTest.class); // 새로 추가한 logger
private static final Logger logger = LoggerFactory.getLogger(DesignCommandRPCTest.class); // 기존에 사용하던 logger

log4j로 명시된 logger를 직접 생성하여 만든 logger는 log4j.xml 설정된 모든 내용이 적용됨

slf4j 퍼사드에 log4j 설정을 적용하려면 어떻게 해야하나요...

단순히 log4j,xml만 수정해서는 slf4j에 적용이 안되는것 같습니다.

도와주세요 ㅠ

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)