从Grails BootStrap.groovy和插件描述符发送日志消息



当我将Fixture模块引入Grails应用程序时,我很难从应用程序的主BootStrap.groovy和插件的初始化代码中找到如何发送日志消息。

我在Config.groovy 中使用以下log4j配置

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'
    }
}

在Grails 2.2.4:中

"日志"记录器被注入到应用程序的主BootStrap.groovy和插件的描述符(例如:FooGrailsPlugin.groovy)中

该应用程序的BootStrap.groovy中的记录器的名称类似于"grails.app.BootStrap",因此通过在配置中启用"grails.capp"记录器的附加,将允许显示通过该记录器发送的消息。

插件描述符中的记录器没有包前缀,并且与描述符类完全一样命名,但没有groovy扩展。例如:"FooGrailsPlugin",因此通过默认注入的记录器启用日志消息并不容易。如果你在插件描述符的顶部添加一个包定义,它将不会在记录器名称的组合中使用。

当然,您可以在插件描述符中手动定义一个记录器(根据需要使用包名称),如下所示:

private static final log = LogFactory.getLog("yourapp.foo.FooGrailsPlugin")

之后,您可以在应用程序中启用"yourapp.foo"记录器,您将看到通过插件描述符的手动定义记录器发送的消息。

最新更新