【问题标题】:Sending log messages from Grails BootStrap.groovy and plugin descriptors从 Grails BootStrap.groovy 和插件描述符发送日志消息
【发布时间】:2013-12-11 09:22:04
【问题描述】:

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

【问题讨论】:

    标签: grails logging plugins bootstrapping


    【解决方案1】:

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

    【讨论】:

      【解决方案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”记录器,您将看到通过插件描述符的手动定义记录器发送的消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-22
        • 2020-11-07
        • 1970-01-01
        • 2015-05-13
        • 1970-01-01
        相关资源
        最近更新 更多