正确初始化log4j系统

时间:2015-02-12 19:54:15

标签: java eclipse logging log4j

我正在尝试为我的项目设置log4j。我找到了this教程,我遵循了每个步骤。

当然,我已将jar文件添加到 Referenced Libraries 。下图显示 log.out 文件的路径位于PATH变量中。这就是我的PATH变量的样子(只是一个片段):

enter image description here

下图显示了log4j jar文件和 log4j.properties 文件的路径位于CLASSPATH变量中。这是我的CLASSPATH:

enter image description here

log4j.properties 文件(与前面提到的教程中的.properties示例相比,我唯一更改的是 log4j.appender.FILE.File

enter image description here

这就是我的项目层次结构的样子:

enter image description here

我正在使用以下课程进行测试:

package test;

import org.apache.log4j.Logger;

import java.io.*;
import java.sql.SQLException;

public class Log4jExample{
    /* Get actual class name to be printed on */
    static Logger log = Logger.getLogger(Log4jExample.class.getName());

    public static void main(String[] args) throws IOException,SQLException{

        log.debug("Hello this is an debug message");
        log.info("Hello this is an info message");
    }
}

我一直收到以下异常,并且没有记录到指定的文件:

enter image description here

当尝试按照WARN消息中指定的链接时,我找到了以下答案:

  

当找不到默认配置文件log4j.properties和log4j.xml且应用程序不执行显式配置时,会发生这种情况。

为什么无法找到log4j.properties?怎么解决这个问题?

注意:我看到有很多关于这些特定WARN消息的帖子,但是,我既没有maven项目,也没有动态Web项目。这是一个普通的Java项目,我只是想测试log4j。我有Windows 7并使用Eclipse Luna。

更新:如果我将 log4j.properties 文件移至 src 文件夹,似乎一切正常。如何根据当前的文件结构修改工作内容?

更新#2:我在下面标记为已接受的答案会从更新中回答我的问题。但是,我还发现this帖子提出了一个有用的解决方案来解决这个问题。

3 个答案:

答案 0 :(得分:4)

默认情况下,Log4j会在类路径的根目录中搜索配置文件(log4j.xmllog4j.properties)。将它放在src文件夹中会自动执行此操作。

如果您不希望在那里,可以通过系统属性log4j.configuration告诉Log4j在哪里查找它。然后启动您的应用程序:java -Dlog4j.configuration=file:"D:\..." -jar myapp.jar。在Eclipse中,系统属性在"运行配置>中配置。参数> VM参数"。

答案 1 :(得分:0)

默认情况下,Log4j会在类路径的根目录中搜索配置文件(log4j.xmllog4j.properties)。将它放在src文件夹中会自动执行此操作。

答案 2 :(得分:-1)

试试这个:



 	private static Logger logger 
		= LogManager.getLogger(<<YOURCLASSNAME>>.class.getName());

public static void main(String[] args) {
	
	/*
	 * use DOMConfigurator class
	 * to initialize the log4j environment
	 * using a DOM tree
	 * 
	 */
	DOMConfigurator.configure("log4j.xml");
   logger.info("your info");
&#13;
&#13;
&#13;

我在log4j.xml中配置了log4j属性

// sample log4j.xml

&#13;
&#13;
<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration 
		xmlns:log4j="http://jakarta.apache.org/log4j/" 
		debug="false">
	<appender name="fileAppender" class="org.apache.log4j.FileAppender">
		<param name="Threshold" value="INFO" />
		<param name="File" value="logfile.log" />
		<layout class="org.apache.log4j.PatternLayout" >
			<param name="ConversionPattern" value="%d %-5p [%c] %m %n" />
		</layout>
	</appender>	
	<root>
		<level value="INFO"/>
		<appender-ref  ref="fileAppender"/>
	</root>	
		
		
</log4j:configuration>
&#13;
&#13;
&#13;