使用 syslog (linux) 在日志文件中写入错误类型

writing type of error in log file with syslog (linux)

对使用 syslog 库将错误消息写入日志文件有疑问。

下面是我尝试使用的代码函数

syslog(int priority, const char_message)

我想在日志文件中打印按摩的优先级。 例如:

Mar 23 17:56:37 mypc slog[3597]: this is log massage "ERR"

但现在只显示:

Mar 23 17:56:37 mypc slog[3597]: this is log massage

无论如何我也可以将优先级类型写入日志文件吗? (系统日志仅接受字符串文字)

syslog的函数原型为:

void syslog(int priority, const char *format, ...);

特别是,第二个参数类似于 printf 样式的格式说明符,除了它还支持说明符 %m,它将被替换为 [=16= 生成的错误消息].

您可以通过调用此函数来记录一个简单的字符串和一个优先级字符串:

void my_simple_syslog(int priority, const char *message)
{
    static const char * const prio_strings[] = {
        [LOG_EMERG] = "EMERG",
        [LOG_ALERT] = "ALERT",
        [LOG_CRIT] = "CRIT",
        [LOG_ERR] = "ERR",
        [LOG_WARNING] = "WARNING",
        [LOG_NOTICE] = "NOTICE",
        [LOG_INFO] = "INFO",
        [LOG_DEBUG] = "DEBUG",
    };

    if (priority < 0 ||
        priority >= sizeof(prio_strings) / sizeof(prio_strings[0]) ||
        !prio_strings[priority]) {
        /* priority is an unknown value */
        syslog(priority, "%s [PRIORITY:%d]", message, priority);
    } else {
        syslog(priority, "%s [%s]", message, prio_strings[priority]);
    }
}

本例调用:

my_simple_syslog(LOG_ERR, "this is log massage");

生成类似于以下内容的日志消息:

Mar 23 17:56:37 mypc slog[3597]: this is log massage [ERR]

使用这种固定方法的缺点是您不能像直接调用 syslog 那样添加额外的参数。

请注意,系统日志消息已包含优先级,但在写入文件时会被系统日志守护程序(例如 rsyslog)剥离。 syslog() 调用传递给 syslog 守护进程的 syslog 消息实际上如下所示:

<16>Mar 23 17:56:37 mypc slog[3597]: this is log massage

可以重新配置 syslog 守护程序,以便也打印优先级。 Rsyslog 使用模板,使用 NXLog 你可以简单地这样做:

Exec $raw_event = $raw_evnt + " " + $SyslogSeverity;

另见