【问题标题】:Linux/Unix Syslog writes unwanted characters to log message- using ACELinux/Unix Syslog 使用 ACE 将不需要的字符写入日志消息
【发布时间】:2017-12-27 17:36:09
【问题描述】:

我在多线程环境中向 linux syslog 发送日志消息,使用 ACE 函数:ACE_Log_Msg()。

在大约 5% 的日志消息中,我的系统日志输出中出现了不需要的额外字符。 我用来向 ACE 发送日志消息的代码如下:

#include "ace/Log_Msg.h"

ACE_Mutex syslog_mtx;
int ACE_TMAIN (int argc, ACE_TCHAR *argv[])
{
  ACE_Guard<ACE_Mutex> mtx (syslog_mtx);

  ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::SYSLOG, ACE_TEXT ("syslogTest"));

  ACE_DEBUG ((LM_INFO, ACE_TEXT (L"my log message\n")));

  ACE_LOG_MSG->open (argv[0], ACE_Log_Msg::STDERR, ACE_TEXT ("syslogTest"));

  return 0;
}

我在 syslog 中看到的日志消息如下所示:

Oct 9 15:25:20 SYSLOG ~[62266]: my log message
Oct 9 15:25:20 SYSLOG ``[62266]: 6]: my log message

如您所见,额外字符:~, ``, 6]: 似乎被插入到应用程序名称/进程 ID 以 syslog 格式出现的位置。 我似乎无法理解该错误的可能来源。我很高兴听到有关可能原因的建议。

【问题讨论】:

  • .... ACE_TEXT ("L"my log message\n") ?真的可以编译吗?这是ACE_DEBUG 的一个功能吗?读者需要最少的代码来重现问题。他们将需要编译它以查看问题,因此您需要包含 main() 和任何其他 #includes 来演示问题(希望是 10 行代码)。请阅读 Minimal,Complete,Verifiable Examples 并提高您的 Q。祝您好运。
  • 不要认为有任何需要互斥锁。

标签: linux rsyslog ace


【解决方案1】:

删除"my log message"之前的L,ACE_TEXT已经处理了

【讨论】:

  • 谢谢,但这似乎不是问题。
  • 问题可能出在这行代码上:ACE_Guard mtx (syslog_mtx); ?也许这是一个多线程安全问题?
  • 不,可能是 ACE 库中的错误,尝试在调试器中运行它并检查会发生什么
  • 另外,似乎标题“syslogTest”应该添加到每条日志消息的 syslog 格式中,但似乎没有发生。而不是默认程序名称 SYSLOG 出现在日志消息中。这是为什么呢?
  • 可能是一个错误,尝试在调试器中运行它,看看会发生什么,你有所有的代码,当你有修复时,请在github.com/DOCGroup/ACE_TAO打开一个 PR
猜你喜欢
  • 2012-10-25
  • 2017-08-16
  • 2011-09-06
  • 2015-10-02
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多