0

我正在尝试编写一个函数,它将优先级和可变数量的字符串作为参数来记录应用程序中的信息。

到目前为止,该函数看起来像这样:

int _logf(int priority, char *fmt, ...)
{
    if (log.priority >= priority) {
        syslog(priority,  "LOG:%s", fmt);
    }
    /* stderr and syslog */
}

log.priority是运行时的集合,int可以是LOG_INFO//LOG_DEBUGLOG_ERR

并在使用中:

_logf(LOG_INFO, "Starting app version %s", "1.0");

这是将日志消息发送到的可接受方式syslog吗?

4

1 回答 1

1

这不起作用,因为您不涉及可能传递给函数的可变数量的参数。

关于如何做到这一点,您可以使用以下示例查看vsyslog()

#include <syslog.h>
#include <stdarg.h> 

...

int _logf(int priority, const char * fmt, ...)
{
  if (log.priority >= priority) 
  {
    va_list ap;

    va_start(ap, fmt);

    vsyslog(priority, fmt, ap);

    va_end(ap);
  }
}

然后像这样调用它:

_logf(LOG_INFO, "LOG %s:%d (%s) - %s", __FILE__, __LINE__, __func__, "Just some info.");

更新:

要另外登录stderr你可能想看看功能vfprintf()

于 2013-09-06T13:20:55.083 回答