C++:如何使用 log4cplus 的 SocketAppender 将日志发送到 logstash 服务器?

C++ : How to use SocketAppender of log4cplus to send logs to logstash server?

我正在尝试使用 log4cplus 库将我的 C++ 应用程序的日志发送到 logstash。 我已阅读 log4cplus 文档并使用以下配置来配置 SocketAppender。

log4cplus.rootLogger=INFO, SA
log4cplus.appender.SA=log4cplus::SocketAppender
log4cplus.appender.SA.port=5044  
log4cplus.appender.SA.host=127.0.0.1  
log4cplus.appender.SA.serverName=MyServer
log4cplus.appender.SA.layout=log4cplus::PatternLayout
log4cplus.appender.SA.layout.ConversionPattern=%m%n

在代码中我已经初始化了记录器并尝试将消息发送到记录器。

PropertyConfigurator config(configFile);
config.configure();
std::string msg = "test msg";
Logger root = Logger::getRoot();
LOG4CPLUS_INFO(root,msg);

但是我没有在 logstash 服务器上收到预期的消息。我得到了一些垃圾数据,如下所示。

{ "@version" => "1", "host" => "localhost", "message" => "\u0000\u0000\u0000q\u0003\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004root\u0000\u0000N \u0000\u0000\u0000\u0000\u0000\u0000\u0000\btest msg\u0000\u0000\u0000\u000F140382836238144Z{\u0014N\u0000\u0004\u0003\xC0\u0000\u0000\u0000\u0013../src/property.cpp\u0000\u0000\u00002\u0000\u0000\u0000\u0015int main(int, char**)", "@timestamp" => 2018-02-07T14:59:26.284Z, "port" => 47148 }

我已经阅读了 log4cplus 的文档并尝试了一些配置更改,但没有任何效果。我可以使用 netcat 命令将日志发送到 logstash 服务器。所以至少我确定我的 logstash 配置是正确的。我已经使用以下 conf 文件配置了 logstash。

input {
  tcp {
    port => 5044
  }
}

filter{
}

output {
  stdout {
    codec => rubydebug
  }
}

谁能告诉我我在使用 log4cplus 时做错了什么?是否可以使用 log4cplus 将日志发送到 logstash 服务器?

log4cplus::SocketAppender 特定于 Log4cplus。如果您想登录到 Logstash,您将必须创建自己的附加程序来执行此操作。