0

アプリケーションで情報をログに記録するための引数として、優先度レベルと可変量の文字列を取る関数を作成しようとしています。

これまでのところ、関数は次のようになります。

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

log.priority//int実行時のセットです。LOG_INFOLOG_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には、 function を参照してくださいvfprintf()

于 2013-09-06T13:20:55.083 に答える