Spring 更改应用程序上下文路径会导致使用不同(未知)的日志记录配置

Spring 更改应用程序上下文路径会导致使用不同(未知)的日志记录配置,spring,tomcat,struts2,log4j,apache-commons-logging,Spring,Tomcat,Struts2,Log4j,Apache Commons Logging,设置: Tomcat 6.0.16 Struts 2.1.6 Apache Commons日志记录1.0.4 Log4J 1.2.17 我所做的: server.xml中的更改: <Context path="/" .../></Context> 但是“commons logging logger”不再列出,尽管如果调试代码,我可以验证它们是否存在 问题 如何找到其他配置/根记录器 我是否必须更改struts配置(或其他地方)中与上下文路径更改相关的任何内容 你知

设置:

  • Tomcat 6.0.16
  • Struts 2.1.6
  • Apache Commons日志记录1.0.4
  • Log4J 1.2.17
我所做的:

server.xml中的更改:

<Context path="/" .../></Context>
但是“commons logging logger”不再列出,尽管如果调试代码,我可以验证它们是否存在

问题

  • 如何找到其他配置/根记录器
  • 我是否必须更改struts配置(或其他地方)中与上下文路径更改相关的任何内容
  • 你知道这里有什么问题吗
编辑:我越来越近了

我使用的平台是在启动时加载最小的日志记录。在更改上下文之前,高级日志记录随后被加载,一切正常。出于某种原因,web.xml(Spring初始化等)的侦听器现在在加载高级日志之前运行。这些类使用ApacheCommonsLoggingAPI,并根据简单的根记录器分配记录器。紧接着,根日志记录器被平台替换,但commons日志记录器不会用新配置更新

新问题:
正如我在下面所述,在平台中更改任何内容都是不可选择的那么,当我更改上下文时,为什么侦听器运行得更早,以及如何防止这种情况发生。“

就目前而言,ApacheTomcat使用JDK日志记录。如果未将
commons logging.properties
文件放入源目录,则使用commons logging的默认记录器将为log4j。无论如何,Tomcat不会使用该日志记录,因为它需要一个特殊的配置来告诉它使用log4j

根记录器是您在log4j配置中使用的。比如说

log4j.rootLogger=ERROR,Console  

更改上下文路径与应用程序使用的日志记录无关


我认为日志记录没有任何问题,而在最近发布的关于实现优先级的版本中没有

日志记录在多个tomcat web应用程序之间创建了一个依赖关系,因此这一事实需要加载此模块的特定顺序。将上下文重命名为“/shop”会导致另一个顺序,即
StandardContext.filterDefs
是一个简单的哈希映射,不会保留
server.xml
的顺序

我可以修复在侦听器中运行所需步骤时出现的问题

web.xml

<listener>
     <listener-class>com.[...].InitListener</listener-class>
</listener>
{code}


(顺便说一句,侦听器顺序应该与web.xml相同)

“与日志记录无关”我知道。然而,这是我唯一改变的事情。但是我的一半日志记录者现在仍在写入同一个日志文件,但在其他方面不再受以前工作的log4j.properties的影响。更新日志记录的依赖项,您可能会影响它,最好将所有内容升级到当前版本。抱歉,我没有得到第一部分,但是更新到当前版本是没有选择的,因为我不知道是什么导致了这个问题。在阅读了更多关于commons日志的内容后,这可能是一个类加载器问题吗?你没有得到什么,你是使用maven还是使用一些工具来显示依赖关系?
log4j.rootLogger=ERROR,Console  
<listener>
     <listener-class>com.[...].InitListener</listener-class>
</listener>
package com.[...];

public class InitListener
{
    static
    {
        // init Log4J, etc.
    }
}