Bagaimana cara mematikan semua output Log4J dengan cepat menggunakan log4j.properties
file?
Bagaimana cara mematikan semua output Log4J dengan cepat menggunakan log4j.properties
file?
Jawaban:
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);
}
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.
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>
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;