Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 系统日志不转发远程消息_C++_C_Logging_Syslog_Yocto - Fatal编程技术网

C++ 系统日志不转发远程消息

C++ 系统日志不转发远程消息,c++,c,logging,syslog,yocto,C++,C,Logging,Syslog,Yocto,我用以下配置配置了/etc/syslog.conf *.* @10.10.10.2:514 *.* @@10.10.10.2:514 并通过以下代码登录 openlog("Test-Msg", LOG_PID, LOG_LOCAL0); for (int i = 0; i <10; i++) { syslog(LOG_ALERT, "My msg %d", i); std::cout<<"-------------Writing Syslog "<<

我用以下配置配置了/etc/syslog.conf

*.* @10.10.10.2:514
*.* @@10.10.10.2:514
并通过以下代码登录

openlog("Test-Msg", LOG_PID, LOG_LOCAL0);
for (int i = 0; i <10; i++)
{
    syslog(LOG_ALERT, "My msg %d", i);
    std::cout<<"-------------Writing Syslog "<<i<<"\n";
}

closelog();

现在它开始转发所有消息,但根据linux手册,syslog conf必须支持
*.=alert@
过滤器。如果必须使用上述配置,如何应用过滤器?

默认情况下,基于Yocto的系统使用Busybox提供许多基本工具的最低版本。syslog就是这些工具之一。这是Busybox文档中的引用:

请注意,此版本的syslogd忽略/etc/syslog.conf

要获得完整的系统日志功能,您必须在映像上包含一个更完整的实现。meta openembedded中有几个选项,这可能是一个不错的默认选择。

我会首先使用logger(busybox中包含的工具)来确保系统日志配置正确。 如果消息通过这种方法发送得很好,那么我们可以研究代码

logger [OPTIONS] [MESSAGE]

Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.

Options:

        -s      Log to stderr as well as the system log
        -t TAG  Log using the specified tag (defaults to user name)
        -p PRIO Priority (numeric or facility.level pair)

我也在调查这件事。busybox支持远程日志记录,但它似乎可以转发所有消息。不支持将筛选与远程日志记录相结合。为了解决这个问题,我在映像上安装了rsyslog


我还发现rsyslog不会在开箱即用的情况下旋转文件。Logrotate作为依赖项安装,但没有运行cron守护程序。我必须安装cronie并配置cronie、logrotate和rsyslog。

谢谢@jku我在syslog.conf中添加了一个无效的条目,当我尝试重新启动时,我可以看到它崩溃了。因此,我认为syslogd正在读取配置文件并试图解析它。如果启用了特定的构建配置,那么支持似乎有限:--您肯定已经阅读了源代码,但我敢打赌您的语法不是这样supported@GilsonPJ您需要在映像中包括rsyslog或syslog ng,它们支持远程日志记录。busybox中的syslogd不支持登录到远程计算机。@根据linux手册,syslod必须支持此功能,对吗?为什么busybox实现不同?他们可以自由地以自己的方式实现,但是他们如何避免一个共同的特性呢?该手册页不适用于busybox syslogd实现。busybox syslogd似乎可以使用-R参数进行远程日志记录,但前提是在构建busybox时启用了功能\u remote\u LOG,如中所示。不过,请确保您知道您实际运行的是什么syslogd实现——也许您运行的是完全不同的东西。请仔细检查您使用的是哪个syslog实现……logger工作正常。使用记录器和自定义应用程序进行测试
logger [OPTIONS] [MESSAGE]

Write MESSAGE to the system log. If MESSAGE is omitted, log stdin.

Options:

        -s      Log to stderr as well as the system log
        -t TAG  Log using the specified tag (defaults to user name)
        -p PRIO Priority (numeric or facility.level pair)