sofastack / sofa-ark

SOFAArk is a light-weight,java based classloader isolation framework.
https://www.sofastack.tech/projects/sofa-boot/sofa-ark-readme/
Apache License 2.0
1.57k stars 500 forks source link

log4j会用当前线程上下文中的classloader去初始化配置 #51

Closed RongNanNan closed 6 years ago

RongNanNan commented 6 years ago

Thread.currentThread().getContextClassLoader() 该类加载器,与当前加载器不一致 解决方案:设置参数("log4j.ignoreTCL", "true"); 或者 主动设置改线程上下文类加载期为插件类加载器

QilongZhang commented 6 years ago

请问这是在那种情况下遇到的问题呢? 目前我们推荐的是ark plugin 和 ark biz是各自带有自身的日志实现

RongNanNan commented 6 years ago

自己的demo(spring boot项目)使用自己打的一个插件包里的导出类去创建一个bean,并执行init方法,里面有使用log4j(log4j log4j-1.2.17),加载jar里的log4j配置文件,debug看到代码里使用org.apache.log4j.helpers.loadClass去加载配置文件里的类,里面默认使用Thread.currentThread().getContextClassLoader() 进行加载,debug看到返回的是BizClassLoder

QilongZhang commented 6 years ago

感谢反馈~ 在plugin还是在biz逻辑代码时,都是需要设置对应的线程上下文,对于我们官方的插件,如sofarpc,我们都会手动切换。目前在pluginclassloader触发loadclass时,不会主动切换tccl,我们会调研考虑有没有这个必要,是我们主动切还是留个插件开发者,后续进展会在这个issue更新。

RongNanNan commented 6 years ago

en,建议在文档里添加说明

QilongZhang commented 6 years ago

嗯,好。感谢反馈

QilongZhang commented 6 years ago

我把这个issue关了,请关注 https://github.com/alipay/sofa-ark/issues/57