有关使用syslog库将错误消息写入日志文件的问题。
下面是我试图使用的代码函数
syslog(int priority, const char_message)我想在日志文件中打印按摩的优先级。例如:
3月23日17:56:37 mypc slog3597:这是日志按摩“错误”
但现在只是展示:
3月23日17:56:37 mypc slog3597:这是日志按摩
无论如何,我也可以将优先级的类型写入日志文件吗?(syslog只接受字符串文字)
发布于 2017-03-23 18:15:17
syslog的功能原型是:
void syslog(int priority, const char *format, ...);特别是,第二个参数类似于printf-style格式说明符,但它也支持说明符%m,该说明符%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");生成类似于以下内容的日志消息:
3月23日17:56:37 mypc slog3597:这是日志按摩错误
使用这种固定的方法的缺点是不能像直接调用syslog那样添加额外的参数。
发布于 2017-03-26 15:49:06
注意,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;https://stackoverflow.com/questions/42983390
复制相似问题