有一个关于在将错误消息写入日志文件时使用syslog库的问题。
以下是我尝试使用的代码函数
syslog(int priority, const char_message)
我想在日志文件中打印按摩优先级。 例如:
Mar 23 17:56:37 mypc slog [3597]:这是日志按摩" ERR"
但现在只显示:
Mar 23 17:56:37 mypc slog [3597]:这是日志按摩
无论如何我还可以在日志文件中写入优先级类型吗? (syslog只接受字符串文字)
答案 0 :(得分:1)
syslog
的函数原型是:
void syslog(int priority, const char *format, ...);
特别是,第二个参数类似于printf
- 样式格式说明符,除了它还支持说明符%m
,它将被strerror(errno)
生成的错误消息替换。
您可以通过调用此函数来记录一个简单的字符串以及优先级字符串:
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]:这是按摩[ERR]
使用这种预制方法的缺点是你不能像直接调用syslog
一样添加额外的参数。
答案 1 :(得分:0)
请注意,syslog消息已包含优先级,但在将其写入文件时会被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;