将 LEVEL 包含到 SysLog 日志文件中
Posted
技术标签:
【中文标题】将 LEVEL 包含到 SysLog 日志文件中【英文标题】:Include LEVEL into SysLog log file 【发布时间】:2016-01-13 22:37:28 【问题描述】:是否可以在每个日志行中显示传递给“syslog”函数的级别(LOG_INFO、LOG_ERROR、...)信息?
谢谢! 安东尼奥
【问题讨论】:
你能给我举个例子吗?谢谢! 【参考方案1】:你可以像这样写一个包装函数
#include <stdarg.h>
#include <stdio.h>
#include <syslog.h>
#include <string.h>
#include <stdlib.h>
int
mysyslog(int __level, const char *const syslogformat, ...)
va_list args;
char *format;
size_t length;
char *level;
ssize_t result;
va_start(args,syslogformat);
level = "?";
switch (__level)
case LOG_ALERT:
level = "LOG_ALERT";
break;
case LOG_INFO:
level = "LOG_INFO";
break;
case LOG_EMERG:
level = "LOG_EMERG";
break;
case LOG_CRIT:
level = "LOG_CRIT";
break;
case LOG_ERR:
level = "LOG_ERR";
break;
case LOG_WARNING:
level = "LOG_WARNING";
break;
case LOG_NOTICE:
level = "LOG_NOTICE";
break;
case LOG_DEBUG:
level = "LOG_DEBUG";
break;
length = strlen(syslogformat) + strlen(level) + 2;
format = malloc(length + 1);
result = snprintf(format, length + 1, "%s: %s", level, syslogformat);
if ((result < 0) || (result >= length + 1))
return -1;
vsyslog(__level, format, args);
va_end(args);
return 0;
int main(void)
mysyslog(LOG_NOTICE, "This is a log message `%d' with an integer as parameter\n", 100);
return 0;
【讨论】:
【参考方案2】:只需为您的目标文件使用一个模板,您可以在其中指定您的日志消息将如何显示/写入;像这样的东西只显示系统日志级别和消息:
template t_example template("$LEVEL" "$MSG"); ;
destination d_example file("/var/log/example.log" template(t_example) ); ;
【讨论】:
以上是关于将 LEVEL 包含到 SysLog 日志文件中的主要内容,如果未能解决你的问题,请参考以下文章