所以我有一个正确的实现,它被很好地调用了,但是没有方法LoggerFactory#getContext(String name)
..so,如果我不能传递任何依据来进行决策,那么如何做出决策呢?
有一个ContextSelector#getLoggerContext(String name)
,但我没有访问权限?
所以我的意思是:当我无法将东西传递到选择器中或无法对选择器进行任何访问时,如何进行“选择”?
我需要在运行时根据自己的逻辑从多个上下文中(显然会加载不同的配置)。
我找到了一种解决方案,可以简单地创建LoggerContexts并对其进行配置,但那时我不理解这种替代机制的意义。
最佳答案
ContextSelector
是一个Logback构造,不是Slf4j API的一部分。因此,您在LoggerFactory
上找不到任何与上下文相关的方法
但是没有方法LoggerFactory#getContext(String name)..so,如果我不能在其中传递决策依据,该如何决策
上下文是根据某些线程本地信息确定的。看一下ContextJNDISelector,它基于JNDI确定正确的上下文。现在,当在作为Web应用程序一部分的servlet中调用LoggerFactory.getLogger
并启用JNDI ContextSelector时,Logback将确定线程的JNDI扩展,并根据该LoggerContext
名称来确定。除了某些本地线程外,我看不到LoggerFactory
可以确定上下文的方法。
我找到了一种解决方案,可以简单地创建LoggerContexts并对其进行配置,但那时我不理解这种替代机制的意义。
如果您的上下文选择逻辑可以在您的应用程序的入门级工作(例如,对于webapp,则为servlet过滤器),那么您可以拥有一个自定义的ContextSelector
,它从ThreadLocal中查找,并让过滤器在该threadlocal中设置正确的上下文
关于java - Logback的自定义上下文选择器有什么意义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23088466/