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

时间:2018-02-07 15:16:20

标签: c++ logging logstash log4cplus

我尝试使用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服务器上获得预期的消息。我得到了一些垃圾数据,如下所示。

  

{         " @版本" => " 1&#34 ;,             "主机" => "本地主机&#34 ;,          "消息" => " \ 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 **)",       " @时间戳" => 2018-02-07T14:59:26.284Z,             "端口" => 47148}

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

input {
  tcp {
    port => 5044
  }
}

filter{
}

output {
  stdout {
    codec => rubydebug
  }
}

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

1 个答案:

答案 0 :(得分:0)

log4cplus::SocketAppender特定于Log4cplus。如果你想登录Logstash,你必须创建自己的appender才能做到这一点。