2012-07-06 81 views
5

我正在制作一个简单的grails插件,它将充当我们公司各种项目日志记录的中央配置。总的想法是,你只需将插件添加到你的项目中,然后它将各种appender注入到根记录器。我首先使用Graylog2 appender进行测试(如果我只是在Config.groovy中对其进行配置,它将起作用)。这是BootStrap.groovy中的[它获取在启动时执行的]我尝试了代码(在init():将Log4J appender注入Grails应用程序

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) 

该附加器被正确地实例化并附着在根记录器,这里是从输出。rL.getAllAppenders()toList(){每个打印it.toString()}

org.codeh[email protected]7a054197 
[email protected] 

所以,尽管被添加到根记录的追加程序,和错误级别的消息被写入到日志(并显示到默认的控制台记录器),它根本不会触发Graylog2的消息(我已经使用Wireshark进行检查来验证这一点)。 ks很好,如果我只是在另一个项目的Config.groovy中设置值;但显然这打破了这个插件的目的。

+0

我有同样的问题,但在Config.groovy,你能告诉我你是如何使它工作?在此先感谢 – gurbieta 2013-11-26 02:13:37

回答

1

在将appender添加到根记录器之前,您需要在appender上调用activateOptions()。当你在Config.groovy中配置appender时,Grails会为你做这件事,这就是它在那里工作的原因。

+0

您好,先生,是一个英雄。 – Noxville 2012-07-09 07:46:15