當發生問題時, AP彼此之間要對照時間及訊息時, 就是一件很麻煩的工程,
因為一個事件的引發, 其對應的作業流程卻是散佈於一連串的AP之中,
舉例來說:當客戶下訂單時, 訂單模組會建立訂單, 再通知倉儲模組,
若物料不足, 則須通知採購模組,
若物料充足, 則須通知生產製程模組, 以此類推...
有沒有什麼方法, 可以讓所有AP共同將log message記錄於同一個log file??
答案是: 有的!linux提供了syslog的 system call, 讓這類的工作變得非常簡單易用!
( syslog protocol 運作圖)
#include
int main(int argc, char **argv)
{
openlog("ident", LOG_CONS | LOG_PID, LOG_USER);
syslog(LOG_INFO,
"This is a syslog test message generated by program '%s'\n",
argv[0]);
closelog();
return 0;
}
## 連接至system logger
void openlog(const char *ident, int option, int facility);
## 產生log message
void syslog(int priority, const char *format, ...);
## 關閉連接
void closelog(void);
ident : 出現於每個log message, 通常是設為程式名稱
option :
LOG_CONS : 如果送到system logger時發生問題,直接寫入系統console
LOG_NDELAY : 立即開啟連接(通常,連接是在第一次寫入訊息時才打開的)
LOG_PERROR : 將訊息也同時送到stderr
LOG_PID : 將PID含入所有訊息中
facility : (指定程式的類型, 藉由syslog.conf決定不同的作業方式)
LOG_AUTH : 安全/授權訊息(別用這個,請改用LOG_AUTHPRIV)
LOG_AUTHPRIV : 安全/授權訊息
LOG_CRON : 時間守護神專用(cron及at)
LOG_DAEMON : 其它系統守護神
LOG_KERN : 核心訊息
LOG_LOCAL0到LOG_LOCAL7 : 保留
LOG_LPR : line printer次系統
LOG_MAIL : mail次系統
LOG_NEWS : USENET news次系統
LOG_SYSLOG : syslogd內部所產生的訊息
LOG_USER(default) : 一般使用者等級訊息
LOG_UUCP : UUCP次系統
level : (決定訊息的重要性, 以下的等級重要性逐次遞減)
LOG_EMERG : 系統無法使用
LOG_ALERT : 必須要立即採取反應行動
LOG_CRIT : 重要狀況發生
LOG_ERR : 錯誤狀況發生
LOG_WARNING : 警告狀況發生
LOG_NOTICE : 一般狀況,但也是重要狀況
LOG_INFO : 資訊訊息
LOG_DEBUG : 除錯訊息
priority : (facility | level)
沒有留言:
張貼留言