我有类似的结构一EAR:

APP.ear 
- APP1.war
    - WEB-INF/classes/log4j.properties
- APP2.war
    - WEB-INF/classes/log4j.properties
- app1-ejb.jar
- app2-ejb.jar
- log4j.jar
- spring.jar
- commons-lang.jar (...and other jar)

我希望每个WAR有自己的应用程序日志。但似乎上面的配置不起作用。日志APP1和APP2去APP1的日志。反正是有创建单独的应用程序日志?

有帮助吗?

解决方案

事实证明,它由于类加载器是不可能的。类加载器层次是这样的:

应用程序的类加载器 - > EJB类加载器 - >战类加载器

要拥有sepearte日志,个人战,一个可以把log4j.jar内部战争,让使用log4j的战争类加载器。但随着这两个APP1-ejb.jar和APP 2-ebj.jar还需要使用log4j的,将log4j.jar只能放置在顶层。所以log4j的是应用程序类加载水平。

我可以指定一个单一的log4j配置到不同的包记录到不同的文件。但是,对于像弹簧的公用库中,日志不能sepearted。

其他提示

它没有工作,因为log4j的存在于根的位置,而不是让每个战争在其WEB-INF / lib目录一个Log4j.jar和从根部除去log4j.jar,原因

有关此指这个我的博客文章的详细信息 http://techcrawler.wordpress.com/

您也可以做到这一点通过动态地改变在属性文件的属性文件中使用PropertyConfigurator在代码。

的logback是一个可行的解决方案来解决这个问题。有各地不同的黑客外观,使与log4j的这项工作后,我们决定改用的logback。我已经使用与所述web应用程序的logback内部罐的下面的配置。

web应用程序内部的文件的logback包括外部文件:

    <?xml version="1.0" encoding="UTF-8" ?>
    <configuration scan="true" scanPeriod="10 seconds">
        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
            <resetJUL>true</resetJUL>
        </contextListener>

        <contextName>${project.artifactId}</contextName>

        <jmxConfigurator />

        <include file="${logback.configuration.filepath}" />
    </configuration>

${logback.configuration.filepath}通过的准确路径Maven的滤波期间更换,外部的配置文件的web应用(类似 /opt/server/conf/loback.included.conf )。

然后,将logback.included.conf的内容(该文件是projetct,与build-helper:attach-artifact递送的一部分,所以${project.artifactId}被Maven的滤波期间也替换):

    <?xml version="1.0" encoding="UTF-8" ?>
    <included>
        <appender name="file" class="ch.qos.logback.core.FileAppender">
            <file>/var/log/server/${project.artifactId}.log</file>
            <encoder>
                <pattern>[@/%contextName] %date{ISO8601} [%-5level] %thread:[%logger] %msg%n</pattern>
            </encoder>
        </appender>

        <root level="INFO">
            <appender-ref ref="file" />
        </root>
    </included>

唯一的限制,所包含的文件的内容必须符合的包入的一个。只是写在事实上的规则。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top