簡體   English   中英

如何在單個EAR中為不同的戰爭配置多個log4j?

[英]How to configure multiple log4j for different wars in a single EAR?

我的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類加載器 - > war類加載器

為了獲得單獨戰爭的sepearte日志,可以將log4j.jar置於戰爭中並讓log4j使用war類加載器。 但由於app1-ejb.jar和app2-ebj.jar都需要使用log4j,因此log4j.jar只能放在頂層。 所以log4j在應用程序類加載器級別。

我可以指定一個log4j配置來將不同的包記錄到不同的文件中。 但對於像春天這樣的公共圖書館,日志不能分開。

它之所以沒有用,是因為log4j存在於根位置,而是讓每個war在其WEB-INF / lib目錄中都有一個Log4j.jar,並從root中刪除log4j.jar。

有關這方面的更多信息,請參閱我的博客文章http://techcrawler.wordpress.com/

您也可以使用代碼中的PropertyConfigurator動態更改屬性文件中的FILE屬性。

Logback是解決此問題的可行解決方案。 在瀏覽了不同的hack以使用log4j后,我們決定切換到Logback。 我在webapp中使用了Logback jar的以下配置。

webapp中的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>

在Maven過濾期間, ${logback.configuration.filepath}將被配置文件的webapp外部的確切路徑替換(類似於/opt/server/conf/loback.included.conf )。

然后, logback.included.conf的內容(此文件是projetct的一部分,隨build-helper:attach-artifact ,因此在Maven過濾期間也會替換${project.artifactId} ):

    <?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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM