【问题标题】:How to get GELFJ appender work in log4j?如何让 GELFJ appender 在 log4j 中工作?
【发布时间】:2015-01-06 23:30:10
【问题描述】:

我需要让我的 Java 应用程序将日志记录写入 Graylog2 服务器。 该应用程序使用 log4j 配置。 我尝试将日志写入 Graylog2 服务器的几件事,我正在做的事情是将测试消息直接发送到服务器,如 here 所示(第一个示例)。

然而,当我编写附加程序并将其附加到根记录器时,我总是在第一次触发日志事件时收到此错误消息:

log4j:ERROR 无法发送 GELF 消息

然后在 Graylog2 服务器端什么都不会发生。

我尝试使用的附加程序:

<appender name="graylog2" class="org.graylog2.log.GelfAppender">
    <param name="graylogHost" value="127.0.0.1"/>
    <param name="originHost" value="my.machine.example.com"/>
    <param name="extractStacktrace" value="true"/>
    <param name="addExtendedInformation" value="true"/>
    <param name="facility" value="gelf-java"/>
    <param name="Threshold" value="INFO"/>
    <param name="additionalFields" value="{'environment': 'DEV', 'application': 'MyAPP'}"/>
</appender>

有人知道如何让它运行吗?
非常感谢任何帮助!

【问题讨论】:

  • 这可能有两个原因:您的日志消息为空,您的机器或防火墙/GELF 服务未运行。您发布的代码使用 UDP。使用 netstat -an 检查您的 GELF 端口是否打开。
  • 如果两个条件都满足会发生什么。我可以使用音色库发送 UDP 数据包,但 org.graylog2.log.GelfAppender 不发送任何内容。我的配置和上面类似,根级别设置为INFO。我正在使用 Clojure 和 env/dev/resources 中的 logback.xml 文件。我不知道为什么 GELF 的端口没有流量,但音色库有流量。它也在默默地失败。我不知道在哪里可以找到日志。我正在使用 IntelliJ。有什么想法吗?

标签: java logging log4j graylog2


【解决方案1】:

查看 catalina.out(通常位于 tomcat/logs 下)以获取与 Gelf 相关的错误消息

【讨论】:

    【解决方案2】:

    这项工作对我有用:

    在你的 maven pom 文件中添加这个依赖项

           <dependency>
                <groupId>org.graylog2</groupId>
                <artifactId>gelfj</artifactId>
                <version>1.1.13</version>
            </dependency>
    

    以及 log4j.properties 中的这些行

    # Define the graylog2 destination
    log4j.appender.graylog2=org.graylog2.log.GelfAppender
    log4j.appender.graylog2.graylogHost=192.168.243.23 
    log4j.appender.graylog2.port=12201
    log4j.appender.graylog2.originHost=loggenerator-server-ip
    log4j.appender.graylog2.layout=org.apache.log4j.PatternLayout
    log4j.appender.graylog2.additionalFields={'environment': 'DEV', 'application': 'MyAPP'}
    log4j.appender.graylog2.extractStacktrace=true
    log4j.appender.graylog2.addExtendedInformation=true
    log4j.appender.graylog2.facility=gelfappender-test
    

    【讨论】:

      【解决方案3】:

      通过java代码我附加了GelfAppender,甚至我得到了同样的错误:

      log4j:ERROR Could not send GELF message
      

      我发现错误的原因是我没有调用

      activateOptions();
      

      这个函数会设置我们初始化的gelfSender

      private GelfSender gelfSender;
      

      一旦 gelfSender 设置为 sumthing,消息就可以发送到 GELF

      这是我用来获取GelfAppender的代码

      GelfAppender appender = new GelfAppender();
          appender.setName("GrayLogAppender");
          appender.setGraylogHost("localhost");
          appender.setGraylogPort(12201);
          appender.setFacility("gelf-java");
          appender.setOriginHost("localhost");
          appender.setLayout(lyt);
          appender.setExtractStacktrace(true);
          appender.setAddExtendedInformation(true);
          appender.setAdditionalFields("{'environment': 'DEV', 'application':'MyAPP'}");
          appender.activateOptions();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-29
        • 1970-01-01
        • 2019-12-20
        相关资源
        最近更新 更多