私は、会社のさまざまなプロジェクトのロギングの中心的な構成として機能する単純な grails プラグインを作成しています。一般的な考え方は、プロジェクトにプラグインを追加するだけで、さまざまなアペンダーがルート ロガーに挿入されるというものです。私はこれを最初にGraylog2アペンダーでテストしています(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)
アペンダーは正しくインスタンス化され、ルート ロガーにアタッチされています。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 に値を設定するだけであれば、これはうまく機能します。しかし、明らかにそれはこのプラグインの目的に反します。