当我将Fixture模块引入我的Grails应用程序时,我很难找到如何从应用程序的主BootStrap.groovy和我的插件的初始化代码发送日志消息。
答案 0 :(得分:2)
我在Config.groovy
log4j = {
appenders {
console name: 'consoleAppender', layout: pattern(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{2} - %m%n')
}
root {
// define the root logger's level and appenders, these will be inherited by all other loggers
error 'consoleAppender'
}
// change the default log level for classes in our app to DEBUG
def packageRoot = 'com.example.myapp'
def appNamespaces = [
packageRoot,
"grails.app.conf.$packageRoot",
"grails.app.filters.$packageRoot",
"grails.app.taglib.$packageRoot",
"grails.app.services.$packageRoot",
"grails.app.controllers.$packageRoot",
"grails.app.domain.$packageRoot",
"grails.app.conf.BootStrap"
]
// statements from the app should be logged at DEBUG level
appNamespaces.each { debug it }
}
您需要做的唯一更改是将packageRoot
设置为应用的根包。分配给BootStrap.groovy
的记录器的名称/命名空间为grails.app.conf.BootStrap
,因此在appNamespaces
中包含此名称/命名空间可确保它将以应用程序的默认级别登录(在上面的示例中进行调试) )。
您无需执行任何操作即可在BootStrap.groovy
中获取记录器实例,其中一个已由Grails提供,名称为log
,例如
class BootStrap {
def init = { servletContext ->
log.debug 'hello bootstrap'
}
}
答案 1 :(得分:1)
在Grails 2.2.4中:
“log”记录器被注入应用程序的主BootStrap.groovy并插入到插件的描述符中(例如:FooGrailsPlugin.groovy)
应用程序BootStrap.groovy中的记录器名称类似于“grails.app.BootStrap”,因此通过在配置中添加“grails.app”记录器,可以显示通过此记录器发送的消息。
插件描述符中的记录器没有包前缀,并且与描述符类完全相同,但没有groovy扩展名。例如:“FooGrailsPlugin”,因此通过默认注入的记录器启用日志消息并不容易。如果将包定义添加到插件描述符的顶部,则无效,它将不会用于记录器名称的组合中。
当然,您可以在插件描述符中手动定义记录器(根据您的需要使用包名称),如下所示:
private static final log = LogFactory.getLog("yourapp.foo.FooGrailsPlugin")
在此之后,您可以在应用程序中启用“yourapp.foo”记录器,您将看到通过插件描述符的手动定义的记录器发送的消息。