Menonaktifkan Output Log4J di Java

88

Bagaimana cara mematikan semua output Log4J dengan cepat menggunakan log4j.propertiesfile?

cmcginty.dll
sumber

Jawaban:

123

Setel level ke NONAKTIF (bukan DEBUG, INFO, ....)

Edwin
sumber
79

Jika Anda ingin mematikan logging secara terprogram, gunakan

List<Logger> loggers = Collections.<Logger>list(LogManager.getCurrentLoggers());
loggers.add(LogManager.getRootLogger());
for ( Logger logger : loggers ) {
    logger.setLevel(Level.OFF);
}
Andrew Gilmartin
sumber
5
Dia menetapkan "menggunakan file log4j.properties" bagaimanapun itu sangat berguna.
Jaime Hablutzel
1
Terima kasih, apa yang saya inginkan.
Jose Martinez
Dan bagaimana Anda mengembalikan logger ke pengaturan sebelumnya (secara terprogram)?
Sachin Sharma
Tidak ada keajaiban, hanya pemrograman sederhana. Simpan level saat ini dalam Map <Logger, Level> dalam konteks berumur panjang dan kemudian kembalikan dengan mengulangi set entri yang memanggil e.getKey (). SetLevel (e.getValue ())
Andrew Gilmartin
48
 log4j.rootLogger=OFF
flybywire
sumber
14

Anda dapat mengubah level ke OFF yang akan menghilangkan semua logging. Menurut situs web log4j, level yang valid dalam urutan kepentingan adalah TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Ada satu level tidak terdokumentasi yang disebut OFF yang merupakan level lebih tinggi dari FATAL, dan mematikan semua logging.

Anda juga dapat membuat logger root tambahan untuk tidak mencatat apa pun (level OFF), sehingga Anda dapat mengganti root logger dengan mudah. Berikut adalah posting untuk Anda mulai tentang itu.

Anda mungkin juga ingin membaca Log4J FAQ, karena menurut saya mematikan semua logging mungkin tidak membantu. Ini pasti tidak akan mempercepat aplikasi Anda sebanyak itu, karena kode logging tetap dijalankan, sampai pada titik di mana log4j memutuskan bahwa ia tidak perlu mencatat entri ini.

Rolf
sumber
Dan di bawah TRACE adalah "level" ALL, yang kebalikannya. Kedua, bisa lebih cepat jika program melakukan sesuatu seperti "if (logger.isDebugEnabled ()) logger.debug (...)"
Tim Büthe
OP tidak menyebut kinerja sebagai alasan ingin mematikan semua logging. Ketika saya perlu melakukan ini, itu karena banyak perpustakaan menderita semacam disentri logging, yang tidak menghasilkan informasi yang berguna dan saya ingin cara yang cepat untuk mengatasinya.
Mark Slater
4

Ubah level sesuai keinginan Anda. (Saya menggunakan Log4j2, versi 2.6.2). Ini cara termudah, ganti ke<Root level="off">

Misalnya: Lingkungan Pengembangan Filelog4j2.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>

Lingkungan produksi

<?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>
Do Nhu Vy
sumber
4

Selain itu, Anda juga dapat mematikan log secara terprogram:

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

Atau

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

Ini menggunakan impor:

import org.apache.log4j.Logger;
import org.apache.log4j.Level;
import org.apache.log4j.NullAppender;
maytham-ɯɐɥʇʎɐɯ
sumber
1
Ini adalah solusi terbaik untuk aplikasi mandiri yang seharusnya tidak mencatat apa pun.
basZero