1

使用 Grails 配置 DSL,如何在 appender 上配置appender-ref属性?

我正在尝试将 perf4j 中的 log4j.xml 转换为 Grails 配置 DSL (Grails 2.x)。

在我试图模仿的 log4j.xml 文件中,有这样一段:

log4j.xml

<appender name="CoalescingStatistics"
          class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
    <param name="TimeSlice" value="10000"/>
    <appender-ref ref="fileAppender"/>
</appender>

我想在 Grails 中模仿这个 appender 的配置,但我不知道<appender-ref>标签。

这是我最近的尝试:

log4j = {
    appenders {
        //main appender for the app
        rollingFile ...

        //perf4j coalescing stats appender
        appender new AsyncCoalescingStatisticsAppender(name: "coalescingStatsAppender", timeSlice: 10000)

        //perf4j stats file appender
        rollingFile name: "perfLogFileAppender", file: "perfStats.log", layout: new PatternLayout("%m%n")
    }

    root {
        error 'stdout', 'rollingFileAppender'
    }

    info additivity: false, coalescingStatsAppender: [StopWatch.DEFAULT_LOGGER_NAME]
}

额外细节

这是我模仿的源log4j.xml:

https://web.archive.org/web/20150508124059/http://perf4j.codehaus.org/devguide.html#Using_the_log4j_Appenders_to_Generate_Real-Time_Performance_Information

4

1 回答 1

0

我能够使用一些 Groovy 魔法使其工作:

log4j = {
    appenders {
        //...regular appenders

        //perf4j appenders
        Appender perfLogFileAppender = delegate.rollingFile name: "perfLogFileAppender", file: "perfStats.log", layout: new PatternLayout("%m%n")
        def statsAppender = new AsyncCoalescingStatisticsAppender(name: "coalescingStatsAppender", timeSlice:
            10000)
        statsAppender.addAppender(perfLogFileAppender)
        appender statsAppender
    }
    root {
        error 'stdout', 'rollingFileAppender'
    }

    info additivity: false, coalescingStatsAppender: [StopWatch.DEFAULT_LOGGER_NAME]
}

更优雅的解决方案总是受欢迎的。

于 2015-11-20T18:04:59.010 回答