Java slf4j记录器日志级别未正确继承

Java slf4j记录器日志级别未正确继承,java,logging,slf4j,logback,Java,Logging,Slf4j,Logback,我在一个类中创建了3个不同的slf4j记录器: package x.y.z; public class MyClass { private static final Logger logger1 = LoggerFactory.getLogger(MyClass.class); private static final Logger logger2 = LoggerFactory.getLogger(MyClass.class + "-a); private stati

我在一个类中创建了3个不同的slf4j记录器:

package x.y.z;

public class MyClass {
    private static final Logger logger1 = LoggerFactory.getLogger(MyClass.class);
    private static final Logger logger2 = LoggerFactory.getLogger(MyClass.class + "-a);
    private static final Logger logger3 = LoggerFactory.getLogger(MyClass.class + "-b);

    public void myMethod() {
         // some code that logs to all loggers at debug level
    }
}
奇怪的是,即使在调试级别配置了x.y.z.MyClass,MyClass-a和MyClass-b记录器也没有在调试级别进行日志记录,而是在配置的根级别进行日志记录(在我的例子中是info)。即使为-a和-b指定一个特定的记录器(如下所示),也不起作用。在我将根目录更改为debug之前,它们不会在调试级别进行日志记录。真的被这个难住了,有什么想法吗

<configuration scan="true" scanPeriod="30 seconds">

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
   ....
  </appender>

  <logger name="x.y.z.MyClass" level="DEBUG" />
  <logger name="x.y.z.MyClass-a" level="DEBUG" />
  <logger name="x.y.z.MyClass-b" level="DEBUG" />

  <root>
    <level value="info" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

....

因为您在日志配置中提到了错误的类名

必须是

最好将类规范更改为
公共类MyClass{}

编辑:


请尝试单独指定包名
哪个等效的log4j属性是
log4j.logger.x.y.z=DEBUG

对不起,这只是我在问题示例中的一个错误,实际代码没有这样的问题。我现在已经编辑了。为什么“x.y.z.MyClass-a”要从“x.y.z.MyClass”继承设置?它并不比“x.y.z.OtherClass”更相似。@Henry,因为记录器级别的继承不是通过查找最近的记录器子字符串来工作的。即使尝试为name=“x.y.z”设置debug也不起作用。子字符串太宽,请参阅logback docu:“如果一个记录器的名称后跟一个点是后代记录器名称的前缀,则称其为另一个记录器的祖先。”,因此只有类似“x.y.z.MyClass.A”的内容才能继承配置。这并不能回答你的第二点。@Henry好的,我不知道答案。这很重要。但是,它仍然不能解释为什么x.y.z的配置没有效果,或者为什么与确切名称匹配的配置也没有效果