2012-08-24 18 views
4

項目設置:如何將log4j.properties提供給OSGI Bundle(Eclipse-Plugin)?

  1. 測井-1.0.jar
    • 包含其使用SLF4J/log4j的
    • 取決於SLF4J-api.jar文件,SLF4J-log4j.jar,log4j的一個Logger.class的.jar
  2. LoggingOSGI-1.0.jar
    • 包日誌項目
    • 包含活化劑和MANIFEST.MF
    • LIB /包含測井1.0.jar,SLF4J-api.jar文件,SLF4J-log4j.jar,log4j.jar從LIB
    • 罐子/被加入到類路徑和包從測井1.0.jar出口
  3. SomeBundle-1.2.jar
    • 包含活化劑和MANIFEST.MF
    • 對LoggingOSGI-1.0.jar依賴性

訪問來自SomeBundle的Logger類的工作,但日誌項目找不到log4j.properties(log4j:警告沒有找到記錄器的appender)。

問題:

  • 我在哪裏必須把log4j.properties?
  • 任何想法我可以嘗試嗎? (已經嘗試過:不同的目錄,Eclipse-Buddies,-Dlog4j.configuration作爲VM參數)
  • 會是擴展點,它告訴日誌項目log4j.properties的位置,一個很好的解決方案?
+1

作爲一個側面說明,你可能想結帳[大同登錄](http://team.ops4j.org/wiki/display/paxlogging/Pax+Logging)在OSGi的記錄。 –

+0

這不是一個選項,因爲我們的完整邏輯位於使用slf4j進行記錄的簡單jar中。 eclipse插件只是爲了方便包裝。看到這個問題:http://stackoverflow.com/questions/11670300/tycho-plugin-maven-dependency-plugin-copy-dependencies-from-local-projects-in –

+1

Pax Logging支持slf4j。 –

回答

7

當我過去大約六年前試過,溶液變成是創建一個片段捆綁log4j.properties文件,然後附上片段(通過Fragment-Host清單標題)到加載日誌庫的包(在你的情況下爲「Logging-1.0.jar」)。感覺像很多項目結構,構建時間和部署開銷似乎是一個簡單的目標。

有關片段捆綁的更多詳細信息,請參閱OSGi Service Platform Core Specification的第3.14節。

另一個想法是考慮使用配置管理服務來指定磁盤上的日誌記錄配置文件的路徑,而不是您的軟件包。這需要增加日誌庫來查找配置(或者,更好的是,監聽),然後將該配置傳遞給日誌記錄實現。

我也不想指出OSGi日誌服務,在OSGi服務平臺服務綱要的第101節中指定。

+0

+1:使用片段是這裏的方法。 –

+0

非常好的答案,我仍然相信SystemProperty解決方案更簡單,並使用log4j標準來設置屬性文件(-Dlog4j.configuration = ...) –

1

爲了解決我的問題,我將此代碼添加到配置log4j的LoggingOSGI-1.0的Activator中。文件路徑取自系統屬性:-Dlog4j.configuration=path/to/log4j.properties

對此解決方案的其他方法或意見仍然感興趣。

private static final String LOG4J_CONFIG_KEY = "log4j.configuration"; 

public void start(BundleContext bundleContext) throws Exception { 
    Activator.context = bundleContext; 

    if (System.getProperties().containsKey(LOG4J_CONFIG_KEY)) { 
     String file = System.getProperties().getProperty(LOG4J_CONFIG_KEY); 
     PropertyConfigurator.configure(file); 
    } 
}