2012-12-10 28 views
0

我有一個Grails項目,我用Logback替換Log4j。現在我也想使用org.slf4j.Logger而不是org.apache.commons.logging.Log類進行日誌記錄。如何更改依賴注入放置到每個Controller/Service/Domain類的默認對象logGrails 2.1.1 - 將默認注入日誌對象從commons.logging.Log更改爲slf4j.Logger

我搜索了BuildConfig.groovyConfig.groovy文件,但是我找不到任何配置?我也看過grails-app/src/templates/artifacts/Controller.groovy,但我仍然找不到任何可以配置的地方...

舒爾,我可以得到我自己的org.slf4j.Logger的實例,但是我必須在每個類中聲明它像

private static Logger lbLogger = LoggerFactory.getLogger(MyClass.class) 

這不是我想要的東西 - 我很想只需更換注射Logger對象。

有沒有人對此主題有任何建議?

回答

1

我不記得日誌對象是如何被注入的,但無論如何,您可以將自己的日誌記錄注入到控制器,服務或域對象中。

In BootStrap: 
def doWithDynamicMethods = { applicationContext -> 
     // def logger = SLF4J new instance 
     application.controllerClasses.each { controllerClass -> 
      controllerClass.metaClass.getLogger = {-> logger } 
     } 
    } 

這是想法,對不起,我沒有現在的Grails環境,所以我不能做一個可行的代碼。

+0

感謝您的回答......您是否從插件角度講話?這個「依賴注入」我定義的'logger'到每個Controller類中嗎? – herom

+0

我得到了解決方案,或者更好地說一個建議,告訴我Graeme Rocher在grails-user郵件列表中的正確方向:您必須使用'AstTransformer'(請參閱https://github.com/grails /grails-core/blob/master/grails-logging/src/main/groovy/org/codehaus/groovy/grails/compiler/logging/LoggingTransformer.java)並將其作爲一個'java'類在插件中實現...但即使我知道該怎麼做,我不知道如何開發這樣一個插件... – herom

+0

我創建了一個帶有ASTTransformer類的插件,它可以從org.apache.commons中更改注入的'log'對象。 logging.Log'到一個'org.slf4j.Logger'實例。但如果我想添加一些東西(而不是替換或更改已經存在的對象),我會盡力。非常感謝! – herom