2012-02-16 50 views
1

我有一个非常简单的应用程序来说明日志功能。我使用log4j。但是我在设置上遇到了一些麻烦。我下载了文件log4j-1.2.16.jar。并将其连接到我的项目属性 - > Java Build Path - > Libraries - >添加外部JAR ...。这里是我的类:Log4j无法在简单的应用程序中找到属性文件

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.xmllog4j.properties。并确定他们是否需要?他们应该在什么目录中?我还应该注册什么?这是我的项目结构

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

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

+2

尝试将属性文件/ xml文件放在根目录中,而不是将其放置在包ru.log4j.log4jhelloworld中。我也是新来的日志4j,但通过查看你的XML和属性,我觉得其中一个是足够好,所以你可以删除一个,并尝试 – Rocky 2012-02-16 04:51:45

+0

可能重复的[log4j.xml文件放置](http:// stackoverflow .com/questions/4012572/log4j-xml-file-placement) – 2013-03-16 04:19:13

回答

7

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

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

1

使用-Dlog4j.debug虚拟机参数运行该应用程序,系统会提示您输入log4j希望的位置。

0

我有类似的问题。并通过将以下行的运行方式解决了这个问题 - >运行配置 - >参数选项卡

-Dcvp.property.path=/home/local/Project/property/ - 你的属性文件


致谢>的位置!

1

log4j.properties文件放在src文件夹中的文件像波纹管

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

,然后在LogExample.java

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

和属性文件设置PropertyConfigurator像波纹管一样设置配置G4J。性能

# 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 
3

的问题是,该记录仪系统无法找到你的配置文件。要解决它,你有几种选择:

  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配置位置是CLASSPATH的一部分。因为如果你使用Maven的例子,只是存储log4j.properties之间的log4j.propertiessrc/main/resources目录

关于差异VS log4j.xml。他们只是两种不同的方式来为log4j记录器定义相同的配置。你不需要这两个文件,只需要决定你喜欢什么样的格式并使用它:)

0

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

private static Logger logger = null; System.setProperty(“log4j.configurationFile”,“C:\ Users \ jhaas \ Workspace_3.0.30 \ RestClient \ conf \ log4j.properties”);以及其他文件。 }

它类似于设置在eclipse VM参数等

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

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

+0

静态代码初始化器需要在任何使用记录器之前运行。这可能有问题。我认为虚拟机的参数很安全。 – Algiz 2017-09-07 12:33:13

相关问题