!!!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 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 #include int main() { syslog(LOG_EMERG|LOG_USER, "syslog test\n"); exit(0); } !openlog、closelog、setlogmask #include 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 #include #include 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); } ---- この本からの覚書。 {{amazon 4797327014}}