【问题标题】:Log4j No appenders could be found for logger (org.apache.hadoop.util.shell)Log4j 找不到记录器的附加程序(org.apache.hadoop.util.shell)
【发布时间】:2015-07-23 10:07:41
【问题描述】:

我在我的项目中使用 maven。当我运行一个程序时,我收到了这个错误,因此我看不到我的程序执行进度,尽管程序正在产生预期的输出。

srimanth@srimanth-Inspiron-N5110:~/CCHD&CCHA/mangoes$ mvn exec:java -q -Dexec.mainClass=bananas.MapReduceColorCount -Dexec.args="hdfs://localhost:9000/users.avrofile hdfs://localhost:9000/pleaseatleastnow6"
log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
srimanth@srimanth-Inspiron-N5110:~/CCHD&CCHA/mangoes$ 

这是我的 pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>fruits</groupId>
  <artifactId>mangoes</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>Hadoop</name>
  <description>Hadoop
Hadoop</description>
<dependencies>
<dependency>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro</artifactId>
  <version>1.7.6</version>
</dependency>
<dependency>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro-mapred</artifactId>
  <version>1.7.6</version>
  <classifier>hadoop2</classifier>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-yarn-api</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-app</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-common</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-yarn-client</artifactId>
    <version>2.6.0</version>
</dependency>

<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-mapreduce-client-core</artifactId>
    <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-yarn-common</artifactId>
    <version>2.6.0</version>
</dependency>
</dependencies>

<build>
<pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.3</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
      <plugin>
  <groupId>org.apache.avro</groupId>
  <artifactId>avro-maven-plugin</artifactId>
  <version>1.7.6</version>
  <executions>
    <execution>
      <phase>generate-sources</phase>
      <goals>
        <goal>schema</goal>
      </goals>
      <configuration>
        <sourceDirectory>${project.basedir}/../</sourceDirectory>
        <outputDirectory>${project.basedir}/target/generated-sources/</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>
    </plugins>
    </pluginManagement>
  </build>

</project>

我是否缺少任何依赖项?如何/在哪里正确配置 log4j。提前致谢。我将不胜感激。

【问题讨论】:

  • 首先不是错误,只是警告;尽管如此,还是一个重要的警告。
  • 好的。但我想看看执行进度。如何删除此警告?
  • @SrimanthDuggineni,确保您已将 log4j.properties 文件放在类路径中......

标签: java maven hadoop logging log4j


【解决方案1】:

对于 Maven,您必须将 log4j.properties 或 log4j.xml 文件放在 main/resources 文件夹中。而已。无事可做。创建您自己的属性文件。像这样。

log4j.rootLogger=DEBUG, CA

log4j.appender.CA=org.apache.log4j.ConsoleAppender

log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

您可以为 log4j.rootlogger 属性提供 INFO、ERROR、WARNING、FATAL 和 DEBUG。将调试替换为最适合您需求的日志模式。

【讨论】:

  • 我给 log4j.rootLogger 属性提供了 DEBUG,将文件放在 main/resources 中,然后编译项目。现在我可以调试所有消息了 :) 它就像魅力一样
【解决方案2】:

遵循警告中给出的 URL。它将给出一些指导信息。

http://logging.apache.org/log4j/1.2/faq.html#noconfig

来自网站:

当默认配置文件 log4j.properties 和 找不到 log4j.xml 并且应用程序没有执行显式 配置。 log4j 使用 Thread.getContextClassLoader().getResource() 定位到默认配置文件,不直接检查 文件系统。知道适当的放置位置 log4j.properties 或 log4j.xml 需要了解搜索 正在使用的类加载器的策略。 log4j 不提供默认值 配置,因为输出到控制台或文件系统可能是 在某些环境中被禁止。

您需要log4j.properties 或log4j.xml。构建最适合您需要的任何一个。阅读Log4J manual 会给你一些知识来帮助构建配置文件

【讨论】:

    猜你喜欢
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2018-03-21
    • 2018-03-18
    相关资源
    最近更新 更多