【问题标题】:Logback - determine the actual logger that sent the log message to an appenderLogback - 确定将日志消息发送到附加程序的实际记录器
【发布时间】:2014-09-29 13:54:43
【问题描述】:

是否可以确定将日志消息发送到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) 不会返回不同的实例。背景:我有一个将日志消息发送到 WebSocket 的附加程序。这个附加程序应该能够“订阅”不同的记录器(基本上就像在 XML 中一样)。该网页将在不同的选项卡(“通道”)中显示日志消息。

【问题讨论】:

    标签: java logging logback


    【解决方案1】:

    您可以通过布局了解哪些记录器/类日志:http://logback.qos.ch/manual/layouts.html#conversionWord

    您可以使用自定义模式过滤日志以在不同的选项卡中显示它们。

    【讨论】:

    • 不,%logger 返回com.example.sub.MyClass%contextName 返回default。我需要com.examplecom.example.sub。由于缺少这些值,我也无法过滤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2014-06-30
    • 1970-01-01
    • 2014-10-21
    • 1970-01-01
    相关资源
    最近更新 更多