首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Logback和Graylog不能使用syslog在Mac上进行通信。

Logback和Graylog不能使用syslog在Mac上进行通信。
EN

Stack Overflow用户
提问于 2020-10-12 11:39:44
回答 1查看 396关注 0票数 0

我想从Java应用程序向Graylog发送日志消息,在logback的基础上使用slf4j,其中一边是logback GELF-appender,另一边是Graylog输入。为了测试它,我在Docker容器中运行Graylog (使用Docker for Mac)并在本地运行我的Java应用程序。我的故事的主旨是Graylog输入没有从Java应用程序接收到任何东西。不知何故,Java应用程序和Graylog似乎无法进行通信。当我切换到不同的附录/输入组合(一个基于syslog记录)时,同样的情况也是如此。但是,当将命令行中的消息回显到不同的Graylog输入(即侦听端口5555的原始输入)时,该消息将被很好地接收。

知道问题出在哪里吗?这是我使用GELF的设置:

Java应用程序:

代码语言:javascript
运行
复制
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogDemo {

    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(LogDemo.class);
        logger.error("Hello World 2");
    }
}

pom.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>logdemo</artifactId>
  <version>1.0-SNAPSHOT</version>

  <dependencies>
    <dependency>
      <groupId>de.appelgriepsch.logback</groupId>
      <artifactId>logback-gelf-appender</artifactId>
      <version>1.5</version>
    </dependency>
  </dependencies>
</project>

logback.xml

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="GELF" class="de.appelgriepsch.logback.GelfAppender">
    <server>localhost</server>
    <port>12201</port>
    <protocol>TCP</protocol>
  </appender>

  <root level="error">
    <appender-ref ref="GELF"/>
  </root>
</configuration>

Graylog码头启动:

代码语言:javascript
运行
复制
$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch \
    -e "http.host=0.0.0.0" \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -d docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
$ docker run --link mongo --link elasticsearch \
    -p 9000:9000 -p 12201:12201 -p 1514:1514 -p 5555:5555 \
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" \
    -d graylog/graylog:3.3

Graylog GELF tcp输入(运行):

代码语言:javascript
运行
复制
bind_address: 0.0.0.0
decompress_size_limit: 8388608
max_message_size: 2097152
number_worker_threads: 4
override_source: <empty>
port: 12201
recv_buffer_size: 1048576
tcp_keepalive: false
tls_cert_file: <empty>
tls_client_auth: disabled
tls_client_auth_cert_file: <empty>
tls_enable: false
tls_key_file: <empty>
tls_key_password:********
use_null_delimiter: true

如前所述,当我运行java应用程序时,Graylog在后台作为Docker容器运行,Graylog不会接收我发送的日志消息。但是,当我在命令行上输入以下内容(使用Mac上的终端)时,Graylog原始输入将接收到消息:

代码语言:javascript
运行
复制
$ echo "Testmessage" | nc localhost 5555

有人知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2020-10-12 22:37:49

我找到了一个解决办法,但我不知道问题的确切原因是什么。解决方案是使用一个不同的Gelf附件。我现在使用的不是上面提到的那个,而是下面这个:

代码语言:javascript
运行
复制
<dependency>
  <groupId>de.siegmar</groupId>
  <artifactId>logback-gelf</artifactId>
  <version>2.2.0</version>
</dependency>

这就成功了,但就像我说的,我不知道为什么我之前用的那个不起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64317174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档