我創建了一個Grails 2.4.5應用程序(grails create-app myapp
),並在src/groovy
下添加了一堆Groovy類。對於任何一個需要記錄這些類的,我用@Slf4j
annotation像這樣:Groovy Slf4j註解似乎與Grails內置日誌記錄相沖突
package com.example.myapp
import groovy.util.logging.Slf4j
@Slf4j
class MyObject {
def doSomething() {
log.info('I'm going to do something now.')
}
}
同上Grails的生成的類,如控制器和服務(即我使用的@Slf4j
標註爲一切 )。我終於準備好運行myapp
本地(grails run-app
,當我這樣做,我沒有看到日誌級別我的任何SLF4J陳述的記錄(無論)
下面是從Config.groovy
我的日誌記錄配置:
log4j.main = {
console name: "stdout", layout: pattern(conversionPattern: "%c{2} %m%n")
info 'com.example.myapp' // I'm hoping this is a wildcard that actually
// means 'com.example.myapp.*'
error 'org.codehaus.groovy.grails.web.servlet',
'org.codehaus.groovy.grails.web.pages',
'org.codehaus.groovy.grails.web.sitemesh',
'org.codehaus.groovy.grails.web.mapping.filter',
'org.codehaus.groovy.grails.web.mapping',
'org.codehaus.groovy.grails.commons',
'org.codehaus.groovy.grails.plugins',
'org.codehaus.groovy.grails.orm.hibernate',
'org.springframework',
'org.hibernate',
'net.sf.ehcache.hibernate'
}
我的理解是Grails使用log4j,但是Grails使用它自己的SLF4J綁定,因此這些
@Slf4j
註釋應該可以工作。我試着在我的編譯路徑上放置
'org.slf4j:slf4j-log4j12:1.7.5'
,但這也不起作用(並且產生SLF4J錯誤,抱怨多個綁定在類路徑上;這證實了我的理論,即Grails帶有它自己的SLF4J綁定)
我需要什麼做的就是記錄在這裏工作?這是我需要:
- 我需要配置
com.me.myapp
下記錄所有的包/類,這將是巨大的,如果我能提供某種通配符像com.me.myapp.*
我log4j的配置裏面 - 任何的Groovy使用
@Slf4j
註解,我的Grails應用程序(myapp
)中定義的,或第三方的JAR文件中定義的,必須有自己的日誌類榮幸
請注意:外Grails絕對是我的adore logback。但在我的經驗,我已經找到了被嚴重打破了Grails的插件的logback,所以我不希望從log4j的開關 - >的logback一個Grails應用程序中。