当我介绍了固定模块到我的Grails应用程序,我有麻烦找出如何从应用程序的主BootStrap.groovy中,并从我的插件的初始化代码发送日志消息。
Answer 1:
我用下面的log4j的配置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'
}
}
Answer 2:
在Grails的2.2.4:
“日志”记录器被注入到应用程序的主BootStrap.groovy中,进入插件的描述符(如:FooGrailsPlugin.groovy)
在应用程序的BootStrap.groovy中的记录有像“grails.app.BootStrap”一个名称,以便通过启用“grails.app”记录的追加在配置将允许显示通过该记录器发送的消息。
在插件描述符记录器没有包前缀,并准确地命名为描述符类,但没有Groovy扩展。 例如:“FooGrailsPlugin”,所以它不是那么容易实现由默认的日志信息记录注射。 如果添加了一个包定义为插件描述的前头没有帮助,就不会在记录器的名字的组合物。
当然,你可以手动定义这样的插件描述符记录器(使用根据您的需要包名):
private static final log = LogFactory.getLog("yourapp.foo.FooGrailsPlugin")
在此之后,您可以启用应用程序中的“yourapp.foo”记录器,你会看到通过插件描述的手动定义记录器发送的消息。
文章来源: Sending log messages from Grails BootStrap.groovy and plugin descriptors