谁决定在 logback 的目标位置打印哪些级别的日志消息?

Who decides which levels of log message to be printed in destination in logback?

我对日志消息的级别有一些疑问。我知道有不同类型的日志记录级别以及何时使用什么。但是我不明白的是,谁决定在 Logback 的目标位置打印哪些级别的日志消息?

是 Logger 本身还是附加程序?

通过记录器本身,我的意思是如果我将记录器日志记录级别设置为警告,那么记录器不会将低于警告(信息、跟踪、调试)消息的级别传递给附加程序,或者附加程序是否有责任删除消息低于目的地警告级别?

您在 Logger 而不是 Appender 上设置了级别。以下是 Logback 的 XML 配置的一些示例:

<logger name="com.foo.bar" level="INFO"/>
<logger name="com.foo.bas" level="WARN"/>

在这些例子中:

  • 属于命名空间的任何记录器:com.foo.bar 将受制于 INFO 级别
  • 属于命名空间的任何记录器:com.foo.bas 将受 WARN 级别的约束

Logback 的 rootLogger 定义了默认级别,以下配置告诉 Logback 将 INFO 级别应用于所有记录器,除了那些使用 <logger/> 声明明确配置的记录器:

<root level="INFO">          
  <appender-ref ref="STDOUT" />
</root>  

更多详情in the docs

要回答这个具体问题:

By logger itself i mean if i set the logger logging level to warning then logger won't pass levels less then warning (info,trace,debug) messages to appenders or is it the responsibility of appenders to drop message with level less then warning to destination?

如果您的 Logger 是为名称空间中的 class 创建的:com.x.y 并且您定义了 <logger name="com.x.y" level="INFO"/>,那么 Logger 将过滤掉任何 logger.debug() 调用,因为 DEBUG 级别低于 INFO 级别。