Log4j在简单的应用程序中找不到属性文件

时间:2012-02-16 04:25:46

标签: java eclipse log4j logging

我有一个非常简单的应用程序,它说明了日志记录的功能。我用log4j。但我的设置有些问题。我下载了文件 log4j-1.2.16.jar 。并通过属性 - >将其连接到我的项目Java构建路径 - >图书馆 - >添加外部JAR ...... 。这是我的班级:

package ru.log4j.log4jhelloworld;

import org.apache.log4j.Logger;

public class MyClass {
    private static final Logger logger = Logger.getLogger(MyClass.class);
    public static void main(String[] args) {
        logger.info("Hello World!");        
    }
}  

我的 log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="aa %p %c: %m%n"/>
    </layout>
  </appender>    
  <!--Root logger-->
  <root>
    <priority value ="debug" />
    <appender-ref ref="console" />
  </root>

</log4j:configuration>  

我的 log4j.properties

log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern= %p %c: %m%n

在控制台中显示以下异常:

log4j:WARN No appenders could be found for logger (ru.log4j.log4jhelloworld.MyClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

我不知道应该如何创建和连接其他支持文件,例如 log4j.xml log4j.properties 。并确定他们是否需要?他们应该在哪个目录中找到?我还应该注册什么?这是我的项目结构

screen http://s017.radikal.ru/i433/1202/81/b2739aedc39d.jpg

我猜这个错误。我的问题是什么?请帮帮我!

7 个答案:

答案 0 :(得分:9)

要解决您的问题,请将您的log4j配置文件(即log4j.xmllog4j.properties)放在src文件夹中,它应该可以正常工作。

此外,您不需要这两个文件(log4j.xmllog4j.properties),只需使用其中一个。

答案 1 :(得分:5)

问题是记录器系统找不到您的配置文件。要修复它,您有几个选择:

  1. 如果您需要将记录器配置保留在打包类之外(通常在实际生产系统中进行),那么

    • 将您的记录器配置文件放在类路径之外的文件系统上(例如/etc/my_great_app/log4j.xml
    • 在Java应用程序命令行中包含配置的路径,如下所示 -Dlog4j.configuration=<path log4j config> 例如 -Dlog4j.configuration=file:///etc/my_great_app/log4j.xml 请注意,路径必须包含前缀file://
  2. 如果您希望将log4j配置与代码一起保留(这是单元测试的典型配置),那么您需要做的就是 - 只需确保log4配置位置是类路径的一部分。例如,如果您正在使用maven,只需将log4j.properties存储在src/main/resources目录

  3. 关于log4j.propertieslog4j.xml之间的差异。它们只是为log4j logger定义相同配置的两种不同方式。您不需要这两个文件,只需确定您更喜欢的格式并使用它:)

答案 2 :(得分:1)

使用-Dlog4j.debug VM参数运行应用程序,系统将提示您log4j想要的位置。

答案 3 :(得分:1)

  

log4j.properties文件放在src文件夹文件中,如下文

com.org.slk.LogExample.java
com.org.slk.log4j.properties
  

然后在LogExample.java中设置PropertyConfigurator

PropertyConfigurator.configure(LogExample.class.getResourceAsStream("log4j.properties"));
  

和属性文件集配置如bellow log4j.properties

# Root logger option
log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File= fullpath /myLog.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

答案 4 :(得分:0)

我遇到了类似的问题。并通过在Run AS中添加以下行来解决它 - &gt;运行配置 - &gt;参数选项卡

-Dcvp.property.path=/home/local/Project/property/ - &gt;您的属性文件的位置


谢谢!

答案 5 :(得分:0)

您可以将log4j.properties文件保留在项目中的任何位置。 然后加载您的文件

private static Logger logger = null;

static {     System.setProperty(“log4j.configurationFile”,“C:\ Users \ jhaas \ Workspace_3.0.30 \ RestClient \ conf \ log4j.properties”); }

类似于在eclipse中设置VM参数,如

-Dlog4j.configurationFile = C:\ Users \用户jhaas \ Workspace_3.0.30 \ RESTClient实现\ SRC \主\资源\ log4j.properties

更好的方法是将它放在代码中,而不是设置为eclipse VM参数。

答案 6 :(得分:0)

以上都不适合我。我的代码就是找不到 log4j.properties。这是我的代码:

public class LoggingSadness {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(LoggingSadness.class);
    logger.trace("Pssst! I'm down here!");
    logger.debug("Squash, squash");
    logger.info("Hey, yo!");
    logger.warn("Uh, we might have a problem here...");
    logger.error("Oh, rats in a bucket, screaming for cheese!");
  }
}

还有我的 log4j.properties 文件:

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=WILSON: %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%nConversionPattern=%p\t%d{ISO8601}\t%r\t%c\t[%t]\t%m%n

看来我正在使用 log4j-1.2.17.jar。

我把log4j.properties文件放在src/main/resources/下,没找到。

我在VM选项里加了-Dlog4j.configuration=file:////log4j.properties,还是没有找到。

我尝试了上面提到的

PropertyConfigurator.configure(LogExample.class.getResourceAsStream("log4j.properties"));

但这甚至无法编译:'configure' 不需要流。

更新:结果是“logback”在路径中,并且正在接管。因此,我必须将 logback.xml 文件添加到被忽略的 log4j.properties 所在的同一位置,这样就成功了。