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

MyMemoWiki

「C ログ」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
 
1行目: 1行目:
==C ログ==
+
==[[C ログ]]==
 
[[Programming C]] |  
 
[[Programming C]] |  
 
*ほとんどの場合、log message は、特別な directory におかれた system fileに記録されます。
 
*ほとんどの場合、log message は、特別な directory におかれた system fileに記録されます。
 
*directory のある場所は、/usr/adm または /var/log が一般的
 
*directory のある場所は、/usr/adm または /var/log が一般的
*典型的な Linux system の場合。/var/log/message にすべての system messageが、/var/log/mail にはmail systemからのlog messageが、/var/log/debug には debug messageが記録されます。
+
*典型的な [[Linux]] system の場合。/var/log/message にすべての system messageが、/var/log/mail にはmail systemからのlog messageが、/var/log/debug には debug messageが記録されます。
 
*systemの設定がどうなっているかは、/etc/syslog.conf で確認できます。
 
*systemの設定がどうなっているかは、/etc/syslog.conf で確認できます。
*UNIXの仕様では、すべてのprogramから利用可能な、log message 生成 interface として、syslog 関数を使用することができる。
+
*[[UNIX]]の仕様では、すべてのprogramから利用可能な、log message 生成 interface として、syslog 関数を使用することができる。
 
====syslog====
 
====syslog====
 
  #include <syslog.h>
 
  #include <syslog.h>
17行目: 17行目:
 
!説明
 
!説明
 
|-
 
|-
|LOG_EMERG
+
|LOG_EME[[R]]G
 
|緊急事態
 
|緊急事態
 
|-
 
|-
|LOG_ALERT
+
|LOG_ALE[[R]]T
 
|priorityの高い問題
 
|priorityの高い問題
 
|-
 
|-
|LOG_CRIT
+
|LOG_C[[R]]IT
 
|criticalなerror
 
|criticalなerror
 
|-
 
|-
|LOG_ERR
+
|LOG_E[[R]][[R]]
 
|error
 
|error
 
|-
 
|-
|LOG_WARNING
+
|LOG_WA[[R]]NING
 
|警告
 
|警告
 
|-
 
|-
50行目: 50行目:
 
  int main()
 
  int main()
 
  {
 
  {
   syslog(LOG_EMERG|LOG_USER, "syslog test\n");
+
   syslog(LOG_EME[[R]]G|LOG_USE[[R]], "syslog test\n");
 
   exit(0);
 
   exit(0);
 
  }
 
  }
102行目: 102行目:
 
  int main()
 
  int main()
 
  {
 
  {
   openlog("log test", LOG_PID, LOG_USER);
+
   openlog("log test", LOG_PID, LOG_USE[[R]]);
   setlogmask(LOG_MASK(LOG_ERR));
+
   setlogmask(LOG_MASK(LOG_E[[R]][[R]]));
   syslog(LOG_ERR, "test error message, pid=%d", getpid());
+
   syslog(LOG_E[[R]][[R]], "test error message, pid=%d", getpid());
   syslog(LOG_WARNING, "test warning message, pid=%d", getpid());
+
   syslog(LOG_WA[[R]]NING, "test warning message, pid=%d", getpid());
 
   closelog();  exit(0);
 
   closelog();  exit(0);
 
  }
 
  }

2020年2月16日 (日) 04:22時点における最新版

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);
}

この本からの覚書。