2013-09-24 18 views
2

我從事日誌改進工作,並面臨這樣的問題。在我們的項目中有很多獨立的版本,它們使用一個通用配置和libs的公共項目來構建。對於記錄使用log4j的1.2.15,並在每個獨立使用log4j的初始化bean,它加載在環境名稱環境特定配置的基礎:如果在env中初始化失敗,如何加載一些默認的log4j配置。特定的配置?

<bean id="log4jConfigurer-bean" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/> 
    <property name="targetMethod" value="initLogging"/> 
    <property name="arguments"> 
     <list> 
      <value>classpath:config/env/log4j-${env.name}.xml</value> 
     </list> 
    </property> 
</bean> 

(我們只是做log4j的,從配置的文件名{} env.name .xml在我們的dirs中)。

在某些情況下使用我們常見的lib其他項目(我們假設可以通過一些其他的項目中使用),我們真的不`噸知道環境將如何被調用。在這種情況下,當var $ {env.name}給我們一些未知的名字時,沒有配置文件用於登錄我們的配置目錄。

那麼,怎樣才能在我的情況下做出可能的,如果文件的config/ENV/log4j的 - $ {} env.name的.xml未找到負載一些默認的配置文件?我們不只是在談論環境特定配置(使用spring bean級別)的實現方式,但是也可以將log4j升級到版本2或切換到具有相似功能的其他記錄器,以防其配置可以實現環境特定負載配置級別(可能是某種配置介入)?

可能我只是沒有使用log4j config的所有權力,我可以使用一些連接到環境變量的邏輯在一個配置文件中製作環境特定的appender?任何變體和想法?

+0

嘗試將您的問題中的大塊文本分割爲單獨的段落;現在很難閱讀。 –

回答

1

沒有「開箱即用」的解決方案。

而不是使用MethodInvokingFactoryBean,創建自己的bean驗證參數,然後調用Log4jConfigurer.initLogging()

另外,傳遞這個新的bean的配置列表,並讓它依次嘗試。

相關問題