【发布时间】: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。祝您好运。 -
不要认为有任何需要互斥锁。