我能够使用以下代码以编程方式在应用程序上设置日志记录级别,但是也可以在包级别上执行此 ,比如com.somepackage。*我想要的地方所述包装上的级别仅为ERROR而不是DEBUG或INFO?
// Sets the logging level to INFO
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger(Logger.ROOT_LOGGER_NAME);
rootLogger.setLevel(Level.INFO);
但我似乎找不到在包级别上设置它的方法......
答案 0 :(得分:25)
您应将包名称设置为logger-name
// Sets the package level to INFO
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger("com.somepackage");
rootLogger.setLevel(Level.INFO);
你应该能够让包名更优雅,但基本上就是这样。 这遵循Logger Context的树状层次结构: Logger Context
答案 1 :(得分:4)
您可以使用logback ..
Logger LOG = (Logger) org.slf4j.LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
LOG.setLevel(Level.WARN);
这解决了我的问题。
答案 2 :(得分:1)
您可以获取包的SLF4J记录器并将其转换为Logback记录器。少了@ dimitri-dewaele的代码。
((Logger) LoggerFactory.getLogger("com.somepackage")).setLevel(DEBUG)
@ nandu-prajapati的方法类似,只是它设置了根记录器级别,而不是所需的级别。
答案 3 :(得分:1)
如果您不想将logback-classic更改为编译时依赖项,则此处是一些使用反射设置此级别的代码,假设将logback用作slf4j运行时绑定。这里的 AbcClass 是您要将其记录器级别更改为 TRACE 的类:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SomeClass {
private static final Logger logger = LoggerFactory.getLogger(SomeClass .class);
public static void beforeEachTest() throws Exception {
final Logger loggerInterface = LoggerFactory.getLogger(AbcClass.class);
String loggerLevelNew = "TRACE";
if (!loggerInterface.isTraceEnabled()) {
try {
Class<?> levelLogBackClass = Class.forName("ch.qos.logback.classic.Level");
Method toLevelMethod = levelLogBackClass.getDeclaredMethod("toLevel", String.class);
Object traceLvel = toLevelMethod.invoke(null, loggerLevelNew);
Method loggerSetLevelMethod= loggerInterface.getClass().getDeclaredMethod("setLevel", levelLogBackClass);
loggerSetLevelMethod.invoke(loggerInterface, traceLvel);
} catch (Exception e) {
logger.warn("Problem setting logger level to:{}, msg: {}", loggerLevelNew, e.getMessage());
throw e;
}
}
}
}
对于log4j和JDK日志记录可以做类似的事情,以使该(某种)库不可知