log4j : 특정 클래스의 출력을 특정 어 펜더에 로그


161

log4j를 사용하고 특정 로거의 출력을 특정 파일로 라우팅하고 싶습니다.

이미 여러 개의 appender가 있습니다. 이제 디버깅을 쉽게하기 위해 특정 클래스 (예 : foo.bar.Baz)에서 생성 된 출력을 특정 로그 파일에 작성해야한다는 것을 log4j에 알리고 싶습니다.

이것을 할 수 있습니까?

답변:


203

예를 들면 :

log4j.rootLogger=ERROR, logfile

log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.datePattern='-'dd'.log'
log4j.appender.logfile.File=log/radius-prod.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

log4j.logger.foo.bar.Baz=DEBUG, myappender
log4j.additivity.foo.bar.Baz=false

log4j.appender.myappender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.myappender.datePattern='-'dd'.log'
log4j.appender.myappender.File=log/access-ext-dmz-prod.log
log4j.appender.myappender.layout=org.apache.log4j.PatternLayout
log4j.appender.myappender.layout.ConversionPattern=%-6r %d{ISO8601} %-5p %40.40c %x - %m\n

21
아아-간단 해! 감사! log4j.additivity.foo.bar.Baz = false 설정은 Baz의 출력이 rootLogger의 어 펜더에 표시되지 않도록 강제합니까?
gubrutz

3
이 버전의 log4J는 무엇입니까? log4j 버전 1.2.17에 대해 동일한 작업을 수행하기 위해 XML 구성을 찾으려고합니다.
AC

1
@RodrigoGurgel 네, 특별한 것은 없습니다
Maurice Perry

4
@dwjohnston 가산 성을 false로 설정하면 로거가 조상의 어 펜더에 기록하지 못하게됩니다 (기본적으로 true 임).이 경우, 가산 성이 true로 설정된 경우 Baz 어 펜더에 기록하면 두 파일 모두에 기록됩니다.
모리스 페리

1
xml 구성에 대한 의견이 있으십니까?
Igor Donin 2016 년

21

다음은 XML 구성에 대한 답변입니다. 파일 어 펜더를 제공하지 않으면 ConversionPattern0 바이트 파일이 생성되고 아무것도 쓰지 않습니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <appender name="bdfile" class="org.apache.log4j.RollingFileAppender">
        <param name="append" value="false"/>
        <param name="maxFileSize" value="1GB"/>
        <param name="maxBackupIndex" value="2"/>
        <param name="file" value="/tmp/bd.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/>
        </layout>
    </appender>

    <logger name="com.example.mypackage" additivity="false">
        <level value="debug"/>
        <appender-ref ref="bdfile"/>
    </logger>

    <root>
        <priority value="info"/>
        <appender-ref ref="bdfile"/>
        <appender-ref ref="console"/>
    </root>

</log4j:configuration>

2
그것을 제거하는 것이 중요 <appender-ref ref="bdfile"/>에서 <root>, 그렇지 않으면 당신은 전체 로그이이 파일에 복사 볼 수 있습니다 -.
sab

기본 pacakge 또는 패키지가없는 특정 클래스에 대해 이것을 구성하는 방법은 무엇입니까?
Prasad Jadhav

그것은 <logger>...요소입니다. 클래스 또는 패키지를 이름으로 지정하고 어 펜더를 파일 어 펜더로 지정하십시오.
mikeb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.