从Grails的BootStrap.groovy中和插件描述符发送日志消息(Sending log

2019-10-19 02:52发布

当我介绍了固定模块到我的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.groovygrails.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