在项目中,我们使用Python中的一些技术脚本,使用Subprocess从hive中提取一些数据,运行msck修复表等(我知道我们应该切换到beeline:p),不幸的是,在每个输出中出现log4j问题后,我们开始得到这样的结果:
警告JNDI查找类不可用,因为此JRE不支持JNDI。JNDI字符串查找将不可用,继续配置。忽略java.lang.ClassNotFoundException:org.apache.logging.log4j.core.lookup.JndiLookup
到目前为止,我们的Infra团队还不允许我们对log4j属性进行任何更改。
由于我们有多个技术脚本在许多地方,我们希望找到一个简单的解决方案的时间(直到我们可以修复它的基础设施水平)。
已尝试:使用hive -s设置hive.root.looger到控制台(我认为不知何故log4j不理解这是警告)
伙计们,有人知道我们如何修复它吗(最好是在运行时)
谢谢你!
2条答案
按热度按时间eimct9ow1#
解决这个问题的一个方法是用
JndiLookup
的一个弱化版本来修补你的log4j-core
,而不是用zip -d ...
完全删除这个类。这个类的一个简单版本看起来像这样:下面是自动化编译和替换过程的bash脚本的要点:
https://gist.github.com/xyu/348e9cecf25e09bef997a58e1901481b
huus2vyu2#
我查看了JndiLookup.java从2.0版到2.14.1版的变化(就在2.15发行版之前)。没有重大的变化。无论您的应用程序使用的是什么log4j2版本,您都可以创建一个JndiLookup.java模拟类,在调用JndiLookup.lookup时只调用LOGGER.warn,而不调用其他任何内容。然后,您可以替换JndiLookup。类将加载,但除了给予你一个可以在应用程序日志中监视的日志消息外,没有任何意义,如果这样做会增加价值的话。