(L)ubuntu 12.04 syslog 到自定义文件(不是 /var/log/syslog 而是 /var/log/mylog) - ubuntu 12.04

giu*_*pen 6 ubuntu syslog

我在 ubuntu 12.04 上成功测试了以下系统日志“hello world”示例:

// gcc giuspexample.c -o giuspexample

#include <syslog.h>

int  main(int argc, char *argv[])
{
    setlogmask(LOG_UPTO (LOG_NOTICE));

    openlog("atm", LOG_CONS | LOG_PID | LOG_NDELAY, LOG_LOCAL0);

    syslog(LOG_NOTICE, "Program started by User %d", getuid ());
    syslog(LOG_INFO, "A tree falls in a forest");

    closelog();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以阅读 /var/log/syslog 中的条目。我按照http://www.codealias.info/technotes/syslog_simple_example上的说明操作,了解如何更改目标文件路径

echo "local0.*  /var/log/mylog" >> /etc/syslog.conf
Run Code Online (Sandbox Code Playgroud)

但试图运行

sudo /etc/init.d/syslog restart
Run Code Online (Sandbox Code Playgroud)

不起作用(找不到命令)并且无论如何重新启动电脑都不会开始在 /var/log/mylog 上写入但仍在 /var/log/syslog 上。有人知道出了什么问题吗?谢谢。

giu*_*pen 5

这就是我成功的方式。

在我的文件夹 /etc/rsyslog.d 中有两个文件:

20-ufw.conf 和 50-default.conf

我添加了一个文件:

sudo nano /etc/rsyslog.d/30-mycustomname.conf
Run Code Online (Sandbox Code Playgroud)

内容如下:

# Log QSD Centro generated log messages to file
if $programname == 'centro' then /var/log/centro.log
# Uncomment the following to stop logging anything that matches the last rule.
& ~
Run Code Online (Sandbox Code Playgroud)

然后我检查文件 /var/log/centro.log 不存在

sudo rm -f /var/log/centro.log
Run Code Online (Sandbox Code Playgroud)

然后我重新启动服务

sudo service rsyslog restart
Run Code Online (Sandbox Code Playgroud)

最后以下代码有效:

// gcc centro.c -o centro

#include <stdio.h>
#include <syslog.h>

int  main(int argc, char *argv[])
{
    openlog(NULL, 0, LOG_USER);

    syslog(LOG_INFO, "MORTACCI TUA!!!");

    closelog();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)