簡體   English   中英

log4j2日志記錄發生在錯誤的路徑上

[英]log4j2 logging happening in the wrong path

我在weblogic中部署了一個ear,並將log4j2.xml logPath設置為

<Property name="logPath">some_path_1<Property>

和記錄器定義為

<Logger name="a.b.c.d" level="INFO" />

在這個ear / lib中,有一個包含log4j2.xml的jar,logPath屬性定義為

<Property name="logPath">some_path_2<Property>

和一個包裝結構非常相似的記錄器

<Logger name="a.b.c" level="INFO" />

log4j2.xml都配置為具有不同的日志文件名。 但兩者的日志都在路徑some_path_2中,並且在該jar中定義了文件名

如何確保兩個日志記錄輸出按照定義單獨進行?

我的耳朵結構就像

ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want

Edit1:我在包含war的web.xml中添加了以下內容,但它沒有幫助

    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/classes/log4j2.xml</param-value>
    </context-param>

編輯2:我也試過這個,發現這是間歇性的

ear
|--lib
|--|--abc.jar
|--|--|--log4j2.xml //the one thats getting loaded
|--|--xyz.jar
|--|--|--log4j2.xml //the one I want.. works but not always.Does classloader loads the jars alphabetically?
|--xyz.war
|--|--WEB-INF
|--|--|--classes
|--|--|--|--log4j2.xml // the one I want

Log4j僅使用log4j引導程序首次找到的配置文件初始化一次。 將不考慮所有其他(可能存在的)配置文件。 在相應的教程中了解有關log4j自動配置優先級的更多信息。

正如您可能已經知道您的問題是只有一個配置文件被加載,哪個依賴於類加載器。 所以你不應該依賴它。

你的問題只有兩個可能的問題,但今天我沒有時間為你解決問題 - 抱歉。 您必須刪除或重命名abc.jar中的配置文件

  1. 從abc.jar中刪除log4j2.xml使用ANT / MAVEN / GRADLE中的構建腳本或其他方法。 將配置文件的有趣部分復制粘貼到配置文件中。

  2. 重命名abc.jar中的log4j2.xml使用ANT / MAVEN / GRADLE中的構建腳本或其他任何內容。 現在您可以在log4j2.xml中包含整個配置文件。 這稱為CompositeConfiguration

我希望這個小建議對你有幫助。 祝好運!

你可以從jar / war中刪除XML,並且在ear級別只使用一個xml文件,該文件包含兩個日志記錄路徑/屬性的詳細信息。 您可以嘗試使用特定配置文件在代碼中重新配置log4j2

您也可以動態寫入單獨的日志文件 ,但我個人沒有嘗試過,所以我無法指導更多。

您確定要使用log4j 2使用的“log4.xml”文件嗎? 我不認為,log4j2自動配置機制試圖找出名為“logj.xml”的配置文件。

官方文檔

Log4j能夠在初始化期間自動配置自身。 當Log4j啟動時,它將找到所有ConfigurationFactory插件並按加權順序從最高到最低排列。 交付時,Log4j包含四個ConfigurationFactory實現:一個用於JSON,一個用於YAML,一個用於屬性,一個用於XML。

Log4j將檢查“log4j.configurationFile”系統屬性,如果設置,將嘗試使用與文件擴展名匹配的ConfigurationFactory加載配置。

如果未設置系統屬性,則ConfigurationFactory屬性將在類路徑中查找log4j2.properties或log4j2.json或log4j2.xml文件。

可能您應該嘗試將文件“xyz.war // WEB-INF / classes / log4j.xml”重命名為“xyz.war // WEB-INF / classes / log4j2.xml”。 顯然這個文件的內容必須確認log4j配置xsd。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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