2011-03-30 39 views
2

log4cxx的配置是從通過讀取後續通過XML:log4cxx:與參數配置附加器

DOMConfigurator::configure("log4cxx.xml"); 

但是,只要有文件名設置爲運行時,這創造者患有閱讀多.xmls問題,或者即時創建一個(在內存中/在磁盤上 - 不管在哪裏)。

<appender name="appxNormalAppender" class="org.apache.log4j.FileAppender"> 
    <param name="file" value="appxLogFile.log" /> 
    <param name="append" value="true" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [%t:%x] %C{2} (%F:%L) - %m%n" /> 
    </layout> 
    </appender> 

有沒有辦法通過配置一些值代入<param file="file" value="%%value%%" />或配置後訪問屬性和改變呢?

P.S.這樣做的原因是:同一個程序的多個副本正在寫入相同的日誌,使其看起來很怪。如何通過傳統的方式避免使用log4j/log4cxx而不發明太多的自行車?

+0

如果任何人都可以將此消息放到log4cxx列表中,那會很愉快。 – 2011-03-30 13:50:19

回答

0

這個問題在2年前打到了我;我無法再訪問源代碼,但這是我所做的,或多或少:

  1. 擴展FileAppender並在配置文件中使用它。
  2. 裏面的setFile()方法我追加進程名和ID的文件名(你可以做到這一點在setOption()方法,如果你不使用滾動文件。

我們已經有一個機制,用於唯一通過我們的內部ID識別我們的流程及其實例;例如,您可以使用PID,或者添加一個全局變量,並在每個應用程序中使用log4cxx將其設置爲您的唯一值,然後在您的appender的setOption方法中使用它

另請參閱我的回答:Using Log4j CompositeTriggeringPolicy feature with log4CXX