2011-03-28 61 views
0

我有一个Web应用程序,在JSP中的一个包含:“的log4j:WARN请初始化log4j的系统正确”的错误

PropertyConfigurator.configure(System.getenv("MY_HOME") + "/cfg/log4j.properties"); 

我反复检查MY_HOME是建立

Tomcat的web服务器说:

log4j:WARN No appenders could be found for logger (com.mycompany.data.JobData). 
log4j:WARN Please initialize the log4j system properly. 

相同的设置在其他服务器之一工作正常。

任何提示?

的问题是,没有日志创建

+0

您是否考虑将初始化逻辑移至过滤器或完整的servlet的初始化阶段? – 2011-03-28 18:57:01

回答

1

的PropertyConfigurator之前在您的系统的任何尝试登录,避免此警告必须被调用。您可能会发现在命令行上设置log4j配置更可靠。

或者您可以忽略警告。 ;)

顺便说一句:你不想太频繁地调用这个方法,理想情况下只有一次。

+0

为什么完全相同的设置在不同的环境中工作? – JAM 2011-03-28 18:06:52

+0

启动可能会有所不同,因此在调用此行之前它不记录任何内容。安装程序可能几乎相同,但是不同的OS/JVM版本/ CPU /磁盘速度可能会影响开始的顺序。 – 2011-03-28 18:09:08

+0

在这种情况下,设置几乎肯定会有所不同。 2个环境由不同的人建立并存在于不同的国家。你会如何解决这样的问题? – JAM 2011-03-28 18:10:37

2

与您的答案无关,但这也有帮助。

如果它是一个Web应用程序,最简单的方法是,以确保您的log4j.properties位于WEB-INF/classes文件夹中的文件WAR。当您的应用程序将被部署时,log4J将被配置。

0

我能够在Apache Tomcat 6中运行Eclipse动态Web项目时找到解决此问题的解决方案。基本上,您需要从您的上下文中加载log4j属性文件。

两个基本步骤

(1)获取log4j.properties文件到战争文件的“类目录”。

(2)从当前上下文中读取log4j属性文件。我发现最好的方法是访问当前线程的上下文并从那里开始工作。

对于上面的第一步,修改Eclipse构建过程以添加最终将加载到war文件中的WEB-INF/classes目录中的附加目录。具体来说....

(1)在Eclipse中,右键单击项目浏览器中的项目,选择'新建' - >'文件夹'。您可以将文件夹命名为任何内容,但本例中的标准是“资源”。新文件夹应显示在项目的根目录下。

(2)将log4j.properties文件移动到此新文件夹中。 (3)再次右键单击项目,然后选择'Build-Path' - >'Configure Build Path'。选择“来源”选项卡。点击“添加文件夹”按钮。浏览以找到您在上面步骤(1)中创建的新文件夹。选择“确定”。(4)回到eclipse Project Explorer视图后,请注意该文件夹现在已经移动到'Java Resources'区域(即由于eclipse演示文稿抽象,它不再位于根目录)。

(5)清理构建您的项目。 (6)要验证.properties文件现在存在于WAR文件的WEB-INF/classes中,请将war文件导出到一个简单的位置(右键单击Project - > Export - > War file)并签出内容。请注意,log4j.properties文件现在出现在WEB-INF/classes中。

现在进行上述第二步,访问上下文以读取文件。在尝试读取文件的位置添加以下代码。请注意,这将从战争文件上下文中读出,所以这个'应该'会在战争文件从服务器移动到服务器时起作用。

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 
PropertyConfigurator.configure(classLoader.getResourceAsStream("log4j.properties")); 
相关问题