Nó là không thể xác định một mức độ đăng nhập sjf4j 1.xra khỏi hộp. Nhưng có hy vọng cho slf4j 2.0để khắc phục sự cố . Trong 2.0, nó có thể trông như thế này:
// POTENTIAL 2.0 SOLUTION
import org.slf4j.helpers.Util;
import static org.slf4j.spi.LocationAwareLogger.*;
// does not work with slf4j 1.x
Util.log(logger, DEBUG_INT, "hello world!");
Trong khi đó, đối với slf4j 1.x, bạn có thể sử dụng cách giải quyết này:
Sao chép lớp này vào classpath của bạn:
import org.slf4j.Logger;
import java.util.function.Function;
public enum LogLevel {
    TRACE(l -> l::trace, Logger::isTraceEnabled),
    DEBUG(l -> l::debug, Logger::isDebugEnabled),
    INFO(l -> l::info, Logger::isInfoEnabled),
    WARN(l -> l::warn, Logger::isWarnEnabled),
    ERROR(l -> l::error, Logger::isErrorEnabled);
    interface LogMethod {
        void log(String format, Object... arguments);
    }
    private final Function<Logger, LogMethod> logMethod;
    private final Function<Logger, Boolean> isEnabledMethod;
    LogLevel(Function<Logger, LogMethod> logMethod, Function<Logger, Boolean> isEnabledMethod) {
        this.logMethod = logMethod;
        this.isEnabledMethod = isEnabledMethod;
    }
    public LogMethod prepare(Logger logger) {
        return logMethod.apply(logger);
    }
    public boolean isEnabled(Logger logger) {
        return isEnabledMethod.apply(logger);
    }
}
Sau đó, bạn có thể sử dụng nó như thế này:
Logger logger = LoggerFactory.getLogger(Application.class);
LogLevel level = LogLevel.ERROR;
level.prepare(logger).log("It works!"); // just message, without parameter
level.prepare(logger).log("Hello {}!", "world"); // with slf4j's parameter replacing
try {
    throw new RuntimeException("Oops");
} catch (Throwable t) {
    level.prepare(logger).log("Exception", t);
}
if (level.isEnabled(logger)) {
    level.prepare(logger).log("logging is enabled");
}
Điều này sẽ xuất ra một bản ghi như sau:
[main] ERROR Application - It works!
[main] ERROR Application - Hello world!
[main] ERROR Application - Exception
java.lang.RuntimeException: Oops
    at Application.main(Application.java:14)
[main] ERROR Application - logging is enabled
Nó có đáng không?
- ProNó giữ vị trí mã nguồn (tên lớp, tên phương thức, số dòng sẽ trỏ đến mã của bạn )
- ProBạn có thể dễ dàng xác định các biến , tham số và kiểu trả về nhưLogLevel
- ProMã doanh nghiệp của bạn luôn ngắn gọn và dễ đọc và không cần thêm phụ thuộc nào .
Mã nguồn như một ví dụ tối thiểu được lưu trữ trên GitHub .