所以我有正确的实现,并且它被调用就好了,但没有方法LoggerFactory#getContext(String name)
..如果我无法通过任何内容,它怎么能做出任何决定哪个决定?
有ContextSelector#getLoggerContext(String name)
,但我无法访问它?
所以我的观点是:我怎样才能做出任何选择"当我无法将内容传递到选择器或对选择器有任何访问权限时?
我需要有多个上下文(显然加载了不同的配置),我根据自己的逻辑在运行时选择它。
我找到了一个简单的创建LoggerContexts并配置它们的解决方案,但我当时并不理解这种替代机制的重点。
答案 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中