[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 関数を使用することができる。
#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);
}
#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);
}
この本からの覚書。
YAGI Hiroto (piroto@a-net.email.ne.jp)
twitter http://twitter.com/pppiroto
Copyright© 矢木 浩人 All Rights Reserved.