Logback的自定义上下文选择器有什么意义?

时间:2014-04-15 15:42:30

标签: java logback

所以我有正确的实现,并且它被调用就好了,但没有方法LoggerFactory#getContext(String name) ..如果我无法通过任何内容,它怎么能做出任何决定哪个决定?

ContextSelector#getLoggerContext(String name),但我无法访问它?

所以我的观点是:我怎样才能做出任何选择"当我无法将内容传递到选择器或对选择器有任何访问权限时?

我需要有多个上下文(显然加载了不同的配置),我根据自己的逻辑在运行时选择它。

我找到了一个简单的创建LoggerContexts并配置它们的解决方案,但我当时并不理解这种替代机制的重点。

1 个答案:

答案 0 :(得分:0)

ContextSelector是一个Logback构造,不属于Slf4j API。因此,您在LoggerFactory

上找不到任何与上下文相关的方法
  

但是没有方法LoggerFactory#getContext(String name)..如果我不能传递任何决策权,它怎么能做出任何决定

根据某些线程本地信息确定上下文。看看基于JNDI确定正确上下文的ContextJNDISelector。现在,当在作为webapp的一部分的servlet中调用LoggerFactory.getLogger并启用JNDI ContextSelector时,Logback将确定线程的JNDI conext,并且将确定该LoggerContext名称。除了一些Thread Local之外,我没有看到LoggerFactory可以确定上下文的方式。

  

我找到了一个简单的创建LoggerContexts并配置它们的解决方案,但我只是不明白这种替代机制的重点。

如果您的上下文选择逻辑可以在您的应用程序的入门级别工作(例如,对于例如webapp的servlet过滤器),那么您可以拥有一个自定义ContextSelector,它从ThreadLocal看起来并让您的过滤器设置正确的上下文在那个threadlocal中