Menonaktifkan Output Log4J di Java


88

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

Jawaban:


123

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


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);
}

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


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.


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>

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;

1
Ini adalah solusi terbaik untuk aplikasi mandiri yang seharusnya tidak mencatat apa pun.
basZero
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.