我正在Apache 2下使用tomcat 7,并且我需要在同一个主机(例如localhost)下有2个webapp。

我之前使用过2个Webapp,但是在不同的域上使用过,所以我拥有不同的Host等。

目前,我在log4j方面苦苦挣扎,并在Tomcat启动时注意到以下内容:


部署了A.war,我在A.log文件中看到了日志
已部署B.war,但我看不到日志,有时我将日志放在A.log中而不是B.log中


当我像PropertyConfigurator.configure(“”)那样以编程方式在B.war中加载log4j时,我开始在B.log上获取日志,但是app A停止编写日志。
看起来它使用了相同的类加载器并加载/更改了相同的log4j

您能告诉我我在做什么错吗?我知道每个tomcat实例都使用一个JVM,但是我如何确定每个应用程序都使用一个classloder?

最佳答案

您可以运行2个webapp,并为两个webapp添加配置。或者,您可以使用单一配置,并在文件中添加多个软件包。

例如




<appender name="services" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/shared_services.log</file>
    <encoder>
        <pattern>%d{ISO8601} | %-5level | %thread | %logger{1} | %message%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <maxIndex>30</maxIndex>
        <fileNamePattern>services.log.%i</fileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>

 <appender name="services1" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/shared_services.log</file>
    <encoder>
        <pattern>%d{ISO8601} | %-5level | %thread | %logger{1} | %message%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <maxIndex>30</maxIndex>
        <fileNamePattern>services1.log.%i</fileNamePattern>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <MaxFileSize>10MB</MaxFileSize>
    </triggeringPolicy>
</appender>


<root level="ALL">
    <appender-ref ref="test"/>
</root>

<logger name="org" level="INFO"/>

<logger name="org.apache.cxf.interceptor" level=""/>



 </configuration>


在上面的示例中创建了2个文件。

07-26 09:08