Java에서 Log4J 출력 비활성화


87

파일을 사용하여 모든 Log4J 출력을 어떻게 빠르게 끌 수 log4j.properties있습니까?

답변:


123

레벨을 OFF로 설정합니다 (DEBUG, INFO, .... 대신).


79

프로그래밍 방식으로 로깅을 끄려면 다음을 사용하십시오.

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}

5
어쨌든 그는 "log4j.properties 파일 사용"을 지정했습니다.
Jaime Hablutzel 2011

1
고마워, 내가 원했던 것.
Jose Martinez

로거를 이전 설정 (프로그래밍 방식)으로 되 돌리는 방법은 무엇입니까?
Sachin Sharma

마법이 아니라 단순한 프로그래밍입니다. ) (수명이 긴 컨텍스트에서지도 <로거, 레벨>의 현재 수준을 저장 한 다음 엔트리 세트 호출 e.getKey을 통해 반복하는 의해 되돌아 setLevel (e.getValue ()).
앤드류 Gilmartin


14

레벨을 OFF로 변경하여 모든 로깅을 제거 할 수 있습니다. log4j 웹 사이트에 따르면 중요도 순으로 유효한 레벨은 TRACE, DEBUG, INFO, WARN, ERROR, FATAL입니다. 이 하나 개의 문서화되지 않은 수준의 모든 로그 오프 FATAL보다 높은 수준이다 OFF라고하고, 회전은.

추가 루트 로거를 생성하여 아무것도 기록하지 않도록 (레벨 OFF), 루트 로거를 쉽게 전환 할 수 있습니다. 여기에 시작하는 데 도움이 되는 게시물 이 있습니다.

모든 로깅을 끄는 것이 도움이되지 않을 수 있다고 생각하기 때문에 Log4J FAQ 를 읽어보고 싶을 수도 있습니다 . 어쨌든 로깅 코드가 실행되기 때문에 log4j가이 항목을 기록 할 필요가 없다고 결정할 때까지 앱 속도를 크게 높이지는 못합니다.


그리고 TRACE 아래에는 "레벨"ALL이 있습니다. 그 반대입니다. 둘째, 프로그램이 "if (logger.isDebugEnabled ()) logger.debug (...)"와 같은 작업을 수행하면 더 빠를 수 있습니다.
Tim Büthe

OP는 모든 로깅을 끄려는 이유로 성능을 언급하지 않습니다. 이 작업을 수행해야했을 때 많은 도서관이 유용한 정보를 생성하지 않는 일종의 로깅 이질로 고통 받고 있으며이를 처리하는 간단한 방법을 원하기 때문입니다.
Mark Slater

4

원하는 수준으로 변경하십시오. (Log4j2, 버전 2.6.2를 사용하고 있습니다). 이것은 가장 간단한 방법입니다.<Root level="off">

예 : 파일 log4j2.xml
개발 환경

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>

생산 환경

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Console name="SimpleConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
    <Loggers>
        <Root level="off">
            <AppenderRef ref="SimpleConsole"/>
        </Root>
    </Loggers>
</Configuration>

4

또한 프로그래밍 방식으로 로깅을 해제 할 수도 있습니다.

Logger.getRootLogger().setLevel(Level.OFF);

또는

Logger.getRootLogger().removeAllAppenders();
Logger.getRootLogger().addAppender(new NullAppender());

이들은 수입품을 사용합니다 :

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;

1
이것은 아무것도 기록하지 않아야하는 독립 실행 형 앱을위한 최상의 솔루션입니다.
basZero
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.