2015-10-22 35 views
1

我創建了一個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應用程序中。

回答

1

你是正確的,info 'com.example.myapp'本質上是com.example.myapp.*通配符,所以應該工作。我發現,當預期和記錄器的名稱可能是錯誤日誌記錄不工作,添加println語句記錄器名稱通常清除了什麼是錯誤配置。因此,例如在控制器或服務,只需添加

println "logger name for ${getClass().name} is $log.name" 

,並期待在控制檯該消息調用該控制器動作或服務的方法之後。

相關問題