| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

C ログ

提供: MyMemoWiki
ナビゲーションに移動 検索に移動

C ログ

Programming C |

  • ほとんどの場合、log message は、特別な directory におかれた system fileに記録されます。
  • directory のある場所は、/usr/adm または /var/log が一般的
  • 典型的な Linux system の場合。/var/log/message にすべての system messageが、/var/log/mail にはmail systemからのlog messageが、/var/log/debug には debug messageが記録されます。
  • systemの設定がどうなっているかは、/etc/syslog.conf で確認できます。
  • UNIXの仕様では、すべてのprogramから利用可能な、log message 生成 interface として、syslog 関数を使用することができる。

syslog

#include <syslog.h>
void syslog(int priority, const char *message, ...);

  • 引数priorityには、prioity level と facility の値との bit 単位の論理和を指定。
  • priority level は、log message をどのように扱うか、facility は message の送信元を記録するためのもの。
priority level 説明
LOG_EMERG 緊急事態
LOG_ALERT priorityの高い問題
LOG_CRIT criticalなerror
LOG_ERR error
LOG_WARNING 警告
LOG_NOTICE 注意の必要な状態
LOG_INFO 情報message
LOG_DEBUG debug message
  • facility の値は syslog.h で定義されている。
  • %mを使用すると、現在のerrnoに対応するerror messageが出力される。
#include <syslog.h>
#include <stdlib.h>

int main()
{
  syslog(LOG_EMERG|LOG_USER, "syslog test\n");
  exit(0);
}

openlog、closelog、setlogmask

#include <syslog.h>
void closelog(void);
void openlog(const char *ident, int logopt, int facility);
int setlogmask(int maskpri);
  • openlog関数でlog messageの形式を変更できる。
  • ident parameter は、log messageの前に付加する文字列をしてできる。
  • facility parameterは、以後のsyslog 呼び出しで使用するdefault値を指定。
  • logoptは、以下のparameterの論理和
logoopt 説明
LOG_PID process id を含める
LOG_CONS message を記録できない場合、consoleに出力
LOG_ODELAY syslogが始めて呼び出された時点でlog facilityをopen
LOG_NDELAY 実際にlogが行われる時点まで待たずに、直ちにlog facilityをopen
  • setlogmaskを使用して、priorityを制御できる。
  • logmaskで設定されていないpriorityのsyslog呼び出しは無視される。
  • logmaskを作成するには、以下を使用する。
logmaskの作成 説明
LOG_MASK(priority) 指定したpriorityのみのmask
LOG_UPTO(priority) 指定したpriorityまでのmask
#include <stdio.h>#include <stdlib.h>
#include <unistd.h> 

int main()
{
  openlog("log test", LOG_PID, LOG_USER);
  setlogmask(LOG_MASK(LOG_ERR));
  syslog(LOG_ERR, "test error message, pid=%d", getpid());
  syslog(LOG_WARNING, "test warning message, pid=%d", getpid());
  closelog();  exit(0);
}

この本からの覚書。