Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 需要解决Tomcat在处理记录器后尝试记录事件时出现的webapp错误_Java_Spring_Tomcat_Log4j_Java.util.logging - Fatal编程技术网

Java 需要解决Tomcat在处理记录器后尝试记录事件时出现的webapp错误

Java 需要解决Tomcat在处理记录器后尝试记录事件时出现的webapp错误,java,spring,tomcat,log4j,java.util.logging,Java,Spring,Tomcat,Log4j,Java.util.logging,环境:JSF2.0、RichFaces 3.3.3、Facelets 1.1.15B1、Spring Framework 3.x、WebFlow 2.1、MyBatis 3.0.1、Oracle 10/11G后端、SLF4j到Log4j。这可能是TMI,因为我的问题只是一个日志记录问题,但最好是过于彻底 无论如何。。。我刚刚设置了SLF4j和log4j,所以现在所有内部facelets日志msg都被转储到log4j中&我实际上可以看到它们。此外,我还将Tomcat设置为也转储到log4j,而不是

环境:JSF2.0、RichFaces 3.3.3、Facelets 1.1.15B1、Spring Framework 3.x、WebFlow 2.1、MyBatis 3.0.1、Oracle 10/11G后端、SLF4j到Log4j。这可能是TMI,因为我的问题只是一个日志记录问题,但最好是过于彻底

无论如何。。。我刚刚设置了SLF4j和log4j,所以现在所有内部facelets日志msg都被转储到log4j中&我实际上可以看到它们。此外,我还将Tomcat设置为也转储到log4j,而不是它的自定义版本JULI。这样做之后,一切似乎都很顺利。。。。直到我关闭应用程序

在关机过程的中途,我的应用程序开始从左到右重复错误,因为(这是有道理的)Tomcat在spring已经清理了logger bean之后正试图抓取一个logger实例

有人熟悉这个吗?我想这对于任何使用非标准日志机制的Tomcat的人来说都是一个常见的问题。最好的解决办法是什么


我想,如果我只是提高了日志级别,Tomcat甚至不会尝试记录MSG,因为级别是req.s,但是当Tomcat试图检索一个记录器实例时,问题就出现了,这样就不起作用了。

我会将记录器移到食物链的更高位置

我个人从未使用spring根据自己的配置机制配置log4j(并查找它在过程中使用的属性文件的位置)


如果可以,您可以选择从war中完全删除log4j,并依赖公共tomcat库类路径中的log4j。当然,您将受tomcat配置的支配,无法从应用程序内部访问日志,但在应用程序的整个生命周期中,日志始终存在。

Ok,这是有道理的。我可能应该做的是让log4j在web应用程序日志中负责,让tomcat的JUL完全独立。为了使用log4j re-director,无论如何你需要JUL,所以我不是在添加依赖项。回顾一下,这一切都是有道理的。我认为log4j非常适合于web应用程序级别的日志记录(比七月有更多的粒度)。JUL缺乏粒度,这使得它更适合于更高级别的日志记录,比如在Tomcat中。谢谢你,彼得!