关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa
Posted 亲爱的不二999
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa相关的知识,希望对你有一定的参考价值。
今天在运行某程序时出现了如上图所示的问题,查找资料后发现是由于由于log4j这个日志信息打印模块的配置信息没有给出造成的,简单的说就是人家要有个地方来存放日志的打印信息,可是你又不给人家,所以就报错了吧
解决办法:
在你的项目的src目录中创建一个名为log4j.properties的文本文件,记住是文本文件,不是文件夹
然后在你的文本文件中加入如下的内容:
# Configure logging for testing: optionally with log file #log4j.rootLogger=debug,appender log4j.rootLogger=info,appender #log4j.rootLogger=error,appender #\\u8F93\\u51FA\\u5230\\u63A7\\u5236\\u53F0 log4j.appender.appender=org.apache.log4j.ConsoleAppender #\\u6837\\u5F0F\\u4E3ATTCCLayout log4j.appender.appender.layout=org.apache.log4j.TTCCLayout
我去==没成功 啥原因 继续找
根据错误提示中的链接到Apache官网找日志信息,然鹅(ಥ_ಥ)全是英文 不行 硬着头皮也得把他弄懂了
其实也还蛮简单的 大致上就是说log4j的配置文件没有找到并且应用程序执行的时候没有显示配置,而log4j呢,是依靠Thread.getContextClassLoader().getResource() 这两个类去定位文件的默认信息而不是直接去查他的文件系统,而你要将log4j放在合适的位置就需要知道类装入器(class loader大致是这么个理)的搜索策略,log4j没有提供一个默认的配置不管是输入到控制台还是到文件系统中,不过也可能在某些环境中被禁止。哔哔了半天,就是和文章开头我言简意赅的解释一样
并没有解决问题,所以接着看:
简单的说就是 log4j的类和属性文件不在同一个类加载器的范围。
不简单的说==就是 J2EE或servlet容器利用java的类加载系统,Sun改变了方法与java 2的发布方式,在java类装载器2,被安排在一个分层的parent-child关系,当一个子类的类加载器需要找到一个类或资源,它首先代表父类的要求。
log4j只使用默认的类加载类forname()机制 结论就是:所以,如果你有问题,尝试自己加载类或资源
看样子Apache的log也没帮到忙
最后在外网上找到一个回答:
将该方法插入到main函数中,可以自行打印日志信息了
BasicConfigurator.configure(); //自动快速地使用缺省Log4j环境。
然后测试程序没有问题:
------------------------------------------------------------------------------------
BUT 虽然日志信息打印出来了 可是配置的问题其实还是没有解决
以上是关于关于log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFa的主要内容,如果未能解决你的问题,请参考以下文章
解决log4j:WARN No appenders could be found for logger
log4j:WARN No appenders could be found for logger错误
log4j:WARN No appenders could be found for logger