2014-05-14 59 views
1

我正在寫一個Grails插件,將處以非常具體的log4j設置(在它自己的log4j.xml),我想對它進行配置,使得在使用這個插件應用程序被強制使用插件的log4j的配置(而不是任何log4j配置應用程序本身已定義)。如何配置Grails插件來覆蓋「父」應用程序的Log4J設置?

例如,假設我希望插件強制所有下游Grails應用程序登錄到名爲/var/log/fizz.log的文件。我怎麼能做這個工作?

更新:如果這是不可能的插件來覆蓋使用它,那麼至少是我需要的應用程序能夠使用該插件的log4j的配置,而無需定義自己的應用程序。

回答

2

首先,應用程序配置設置將永遠勝過插件設置。你無法避免(據我所知)。

但是,您始終可以從應用程序的config.groovy中刪除log4j配置,並在插件生命週期的doWithSpring事件內的log4j配置中創建插件連線。這將確保插件負責配置log4j。

我會假設你不需要任何幫助連接log4j.xml部分,因爲你沒有問過這個問題。以防萬一,這可能是這個樣子:

MyLoggingPlugin.groovy

... 
def doWithSpring = { 
    ... 
     log4jConfigurer(org.springframework.beans.factory.config.MethodInvokingFactoryBean){ 
     targetClass = "org.springframework.util.Log4jConfigurer" 
     targetMethod = "initLogging" 
     arguments = "path/to/log4j.xml" 
     } 
    ... 
} 
... 
+0

謝謝@Joshua摩爾(+1) - 是'log4jConfigurer'固有對象的類路徑,或者我需要包括任何JAR並首先實例化它的類的一個實例?如果是這樣,你能提供一個我如何獲得'log4jConfigurer'實例的準確例子嗎?再次感謝! – IAmYourFaja

+0

log4jConfigurer實際上是Spring中負責配置log4j的Bean的名稱。哪些Grails建立在。在我的示例中,您正在Spring應用程序上下文中配置該bean。另一種方法是在您的Resources.groovy中爲您的應用程序定義所述bean,然後從插件中讀取log4j.xml。 –