Tắt đầu ra Log4J trong Java


87

Làm cách nào để có thể nhanh chóng tắt tất cả đầu ra Log4J bằng cách sử dụng một log4j.propertiestệp?

Câu trả lời:


122

Đặt mức thành TẮT (thay vì GỠ LỖI, THÔNG TIN, ....)


79

Nếu bạn muốn tắt ghi nhật ký theo chương trình thì hãy sử dụng

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

5
Anh ấy chỉ định "sử dụng tệp log4j.properties" dù sao nó cũng rất hữu ích.
Jaime Hablutzel

1
Cảm ơn bạn, chỉ những gì tôi muốn.
Jose Martinez

Và làm cách nào để bạn hoàn nguyên các trình ghi nhật ký về cài đặt trước đó (theo chương trình)?
Sachin Sharma

Không có phép thuật, chỉ cần lập trình đơn giản. Lưu trữ các mức hiện tại trong một bản đồ <Logger, Cấp> trong bối cảnh tồn tại lâu dài và sau đó trở lại bởi iterating qua các mục nhập bộ gọi e.getKey () setLevel (e.getValue ()).
Andrew Gilmartin


14

Bạn có thể thay đổi mức độ thành TẮT để loại bỏ tất cả việc ghi nhật ký. Theo trang web log4j, các cấp độ hợp lệ theo thứ tự quan trọng là TRACE, DEBUG, INFO, WARN, ERROR, FATAL. Có một cấp độ không có giấy tờ được gọi là TẮT, cấp độ cao hơn mức FATAL và tắt tất cả ghi nhật ký.

Bạn cũng có thể tạo thêm một trình ghi nhật ký gốc để không ghi nhật ký gì (cấp TẮT), để bạn có thể chuyển đổi trình ghi gốc dễ dàng. Đây là một bài đăng để giúp bạn bắt đầu về điều đó.

Bạn cũng có thể muốn đọc Câu hỏi thường gặp về Log4J, vì tôi nghĩ rằng việc tắt tất cả ghi nhật ký có thể không hữu ích. Nó chắc chắn sẽ không tăng tốc ứng dụng của bạn nhiều như vậy, bởi vì mã ghi nhật ký vẫn được thực thi, cho đến thời điểm mà log4j quyết định rằng nó không cần ghi lại mục nhập này.


Và bên dưới TRACE là "cấp độ" TẤT CẢ, loại ngược lại. Thứ hai, có thể nhanh hơn nếu chương trình thực hiện điều gì đó như "if (logger.isDebugEnabled ()) logger.debug (...)"
Tim Büthe

OP không đề cập đến hiệu suất như là lý do muốn tắt tất cả ghi nhật ký. Khi tôi cần làm điều này, đó là bởi vì nhiều thư viện mắc phải một loại bệnh kiết lỵ ghi chép, không tạo ra thông tin hữu ích và tôi muốn có một cách xử lý ngắn gọn.
Mark Slater

4

Thay đổi mức độ thành những gì bạn muốn. (Tôi đang sử dụng Log4j2, phiên bản 2.6.2). Đây là cách đơn giản nhất, hãy thay đổi thành<Root level="off">

Ví dụ: Môi trường phát triển tệplog4j2.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>

Môi trường sản xuất

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

Ngoài ra, cũng có thể tắt đăng nhập theo chương trình:

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

Hoặc là

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

Những thứ này sử dụng nhập khẩu:

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

1
Đây là giải pháp tốt nhất cho các ứng dụng độc lập không ghi lại bất cứ thứ gì.
basZero
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.