Java'da Log4J Çıktısını Devre Dışı Bırakma


88

Bir dosya kullanarak tüm Log4J çıktılarını nasıl hızlı bir şekilde kapatabilirsiniz log4j.properties?

Yanıtlar:


123

Seviyeyi KAPALI olarak ayarlayın (DEBUG, INFO, .... yerine)


79

Programlı olarak günlük kaydını kapatmak istiyorsanız şunu kullanın:

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

5
O "log4j.properties dosyası kullanarak" belirtmiş olsa da bu çok kullanışlı.
Jaime Hablutzel

1
Teşekkür ederim, tam istediğim gibi.
Jose Martinez

Ve kaydedicileri önceki ayara (programlı olarak) nasıl geri döndürürsünüz?
Sachin Sharma

Sihir yok, sadece basit programlama. ) (Uzun ömürlü bağlamda Harita <Kaydedici, Seviye> mevcut seviyesini saklayın ve daha sonra giriş kümesi çağıran e.getKey üzerinde iterating hemen geri setLevel (e.getValue ()).
Andrew Gilmartin


14

Seviyeyi, tüm kayıtlardan kurtulacak şekilde KAPALI olarak değiştirebilirsiniz. Log4j web sitesine göre, önem sırasına göre geçerli seviyeler TRACE, DEBUG, INFO, WARN, ERROR, FATAL'dır. KAPALI adında, FATAL'den daha yüksek bir düzey olan ve tüm günlük kaydını kapatan bir belgelenmemiş düzey vardır .

Ayrıca hiçbir şey kaydetmemek için fazladan bir kök kaydedici oluşturabilirsiniz (seviye KAPALI), böylece kök kaydedicileri kolayca değiştirebilirsiniz. İşte buna başlaman için bir gönderi .

Ayrıca Log4J SSS bölümünü de okumak isteyebilirsiniz , çünkü bence tüm günlük kayıtlarını kapatmak işe yaramayabilir . Uygulamanızı kesinlikle bu kadar hızlandırmayacaktır, çünkü log4j'nin bu girişi kaydetmesine gerek olmadığına karar verene kadar günlük kaydı kodu çalıştırılır.


Ve TRACE'in altında TÜM "seviye" vardır, bunun tam tersi nedir? İkinci olarak, program "if (logger.isDebugEnabled ()) logger.debug (...)" gibi bir şey yaparsa daha hızlı olabilir
Tim Büthe

OP, tüm günlük kaydını kapatmak istemenin nedeni olarak performanstan bahsetmiyor. Bunu yapmam gerektiğinde, bunun nedeni birçok kütüphanenin hiçbir yararlı bilgi üretmeyen bir tür günlük dizanteri sıkıntısı çekmesi ve bununla başa çıkmanın kısa bir yolunu istiyorum.
Mark Slater

4

Seviyeyi istediğiniz şeye değiştirin. (Log4j2, sürüm 2.6.2 kullanıyorum). Bu en basit yol,<Root level="off">

Örneğin: Dosya log4j2.xml
Geliştirme ortamı

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

Üretim ortamı

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

Ek olarak, günlüğe kaydetmeyi programlı olarak kapatmak da mümkündür:

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

Veya

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

Bunlar ithalatı kullanır:

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

1
Bu, hiçbir şey kaydetmemesi gereken bağımsız uygulamalar için en iyi çözümdür.
basZero
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.