यह है नहीं sjf4j में एक लॉग स्तर निर्दिष्ट करना संभव 1.x
बॉक्स से बाहर। लेकिन इस मुद्दे2.0
को ठीक करने के लिए slf4j के लिए आशा है । 2.0 में ऐसा लग सकता है:
// 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!");
इस बीच, slf4j 1.x के लिए, आप इस समाधान का उपयोग कर सकते हैं:
इस वर्ग को अपने वर्गपथ में कॉपी करें:
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);
}
}
तो आप इसे इस तरह से उपयोग कर सकते हैं:
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");
}
यह इस तरह एक लॉग आउटपुट करेगा:
[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
यह इसके लायक है?
- Proयह स्रोत कोड स्थान रखता है (वर्ग नाम, विधि नाम, लाइन संख्या आपके कोड को इंगित करेगा )
- Proआप आसानी से चर , मापदंडों और वापसी प्रकार को परिभाषित कर सकते हैं
LogLevel
- Proआपका व्यवसाय कोड पढ़ने में छोटा और आसान है, और इसके लिए कोई अतिरिक्त निर्भरता की आवश्यकता नहीं है।
कम से कम उदाहरण के रूप में स्रोत कोड GitHub पर होस्ट किया गया है ।