Logback - 确定将日志消息发送到appender的实际记录器

时间:2014-09-29 13:54:43

标签: java logging logback

是否可以确定将日志消息发送到logback中的追加者的实际记录器?例如:

<configuration>
    <!-- ... -->
    <logger name="com.example">
      <appender-ref ref="myAppender"/>
    </logger>
    <logger name="com.example.sub">
      <appender-ref ref="myAppender"/>
    </logger>
</configuration>

现在,com.examplecom.example.sub都会引用myAppender。如果我登录com.example.sub.MyClass,两个记录器都会在myAppender上触发.doAppend()。现在,是否可以获取实际发送消息的记录器的名称(保留对myAppender的引用)?

示例性输出:

Logger com.example (com.example.sub.MyClass)  Test
Logger com.example.sub (com.example.sub.MyClass)  Test

我以编程方式配置日志框架。我想,我可以做点像

ContextSelectorStaticBinder binder = ContextSelectorStaticBinder.getSingleton();
ContextSelector selector = binder.getContextSelector();
selector.getLoggerContext(name).setName(name);
selector.getLoggerContext(name).getLogger(name).addAppender(appender);

然后在Encoder

@Override
public void doEncode(ILoggingEvent event) throws IOException {
    String name = event.getLoggerContextVO().getName();
    // ...
}

但是selector.getLoggerContext(name)并没有返回不同的实例。背景:我有一个appender将日志消息发送到WebSocket。这个appender应该能够&#34;订阅&#34;到不同的记录器(基本上像在XML中)。该网页将在不同的标签中显示日志消息(&#34;渠道&#34;)。

1 个答案:

答案 0 :(得分:0)

您可以知道哪个记录器/类记录了布局:http://logback.qos.ch/manual/layouts.html#conversionWord

您可以使用自定义模式过滤日志,以便在不同的标签中显示它们。