Java SLF4J 层次结构执行

标签 java logging slf4j

有什么方法可以执行来自特定儿子的层次结构中的每个日志吗?

例如:

-Parent
    -Son
       -Son2
  1. 执行 Son.log("message") 将执行 Son 日志和 Parent 日志。
  2. 执行 Son2.log("message") 将执行 Son2、Son 和父日志。

这就是代码:

public class HelloWorld {

   public static void main(String[] args) {

       Logger parent = LoggerFactory.getLogger("parent");
       ((ch.qos.logback.classic.Logger) parent).setLevel(Level.DEBUG);

       Logger son= LoggerFactory.getLogger("parent.son");
       son.debug("hello");
   }
}

输出:

14:15:25.180 [main]调试logger.son-Hello world。

期望的输出:

14:15:25.180 [main]调试parent.son-世界你好。 14:15:25.180 [main] 调试父级 - Hello world。

谢谢。

最佳答案

事情不是这样的。 SLF4J Logger 层次结构不能(也不应该)按照您想要的方式使用。

基本上,对于每个记录器,如果您没有定义任何设置,则将从父记录器复制设置。在您的层次结构中,parent 的日志记录级别设置为 DEFAULT,并且没有为 parent.son 定义任何内容。因此 parent.son 的日志记录级别也将为 DEBUG。因此,所有级别高于或等于 DEBUG 的日志都将为 parent.son 记录。如果您将子进程的日志级别设置为 TRACE,那么该级别将优先于父进程的 DEBUG 级别。

关于Java SLF4J 层次结构执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43068845/

相关文章:

python - 使用 python 处理许多巨大的日志文件

logging - slf4j 日志语法

java - 我的 Java 应用程序的日志在哪里?

java - 是否可以在 foreach 循环中填充数组

java - Android 位图/字节数组内存泄漏

java - 在Java sesame中打印一条语句

java - weblogic java.lang.IllegalStateException : Could not find backup for factory javax. faces.context.FacesContextFactory。

logging - 日志语句阻止重构 : how to help this?

python - 导入模块时将记录器对象作为参数

java - 如何使用 Logback 更改 JSON 输出中的键名?