我正在制作一个简单的 grails 插件,它将作为我们公司各种项目日志记录的中央配置。一般的想法是您只需将插件添加到您的项目中,它就会将各种附加程序注入到根记录器中。我首先使用 Graylog2 appender 进行测试(如果我只是在 Config.groovy 中配置它,它就可以工作)。这是我尝试过的代码(在 BootStrap.groovy [在启动时执行]的 init() 中):
def rL = Logger.rootLogger
def layout = new PatternLayout(conversionPattern: '%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %c{1} - %m%n')
Appender appender = new org.graylog2.log.GelfAppender(
name:"gelf",
graylogHost:"graylog2.ourcompany.com",
extractStacktrace: true,
addExtendedInformation: true,
facility: "gelf-java",
threshold: org.apache.log4j.Level.INFO,
additionalFields: "{'runtime': 'grails', 'environment': 'dev', 'transport': 'gelf-java'}",
layout: layout
)
rL.addAppender(appender)
appender 已正确实例化并附加到根记录器,这里是rL.getAllAppenders().toList().each { print it.toString() }的输出:
org.codehaus.groovy.grails.plugins.log4j.appenders.GrailsConsoleAppender@7a054197
org.graylog2.log.GelfAppender@6f155f16
因此,尽管 Appender 被添加到根记录器,并且错误级别的消息被写入日志(并显示到默认控制台记录器),但它根本不会将消息触发到 Graylog2(我已经使用 Wireshark 检查过验证这一点)。如果我只是在另一个项目的 Config.groovy 中设置值,这很好用;但显然这违背了这个插件的目的。