【发布时间】: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.example 和com.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 中一样)。该网页将在不同的选项卡(“通道”)中显示日志消息。
【问题讨论】: