sl4j和logback - 是否可以以编程方式设置包的日志记录级别?

Ste*_*ier 18 java logging slf4j

我能够使用以下代码以编程方式在应用程序上设置日志记录级别,但也可以在包级别上执行此操作,例如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);
Run Code Online (Sandbox Code Playgroud)

但我似乎找不到在包级别设置它的方法......

Dim*_*ele 26

您应该将包名称设置为logger-name

// Sets the package level to INFO
LoggerContext loggerContext = (LoggerContext)LoggerFactory.getILoggerFactory();
Logger rootLogger = loggerContext.getLogger("com.somepackage");
rootLogger.setLevel(Level.INFO);
Run Code Online (Sandbox Code Playgroud)

你应该能够让包名更优雅,但基本上就是这样.这遵循Logger Context:Logger Context的树状层次结构

  • 把它收回。它确实对我有用。我的 xml 配置在“com.xy”上设置了日志级别,而我的基于上述答案的编程代码在“com.x”上设置了日志级别。因此“.y”设置覆盖了我的编程配置。 (2认同)
  • 您还可以获取包的 SLF4J 记录器并将其转换为 Logback 记录器。更少的代码。`((Logger) LoggerFactory.getLogger("com.somepackage")).setLevel(DEBUG)` (2认同)

Nan*_*ati 7

您可以通过使用 logback 来做到这一点。

Logger LOG = (Logger) org.slf4j.LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
LOG.setLevel(Level.WARN);
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题。

  • 没有为我工作。`ROOT_LOGGER_NAME 不是对象 ch.qos.logback.classic.Logger` 的成员 (3认同)
  • 这不只是设置根记录器的级别吗? (2认同)