作者 主題: 請問有關於syslogd  (閱讀 2930 次)

0 會員 與 1 訪客 正在閱讀本文。

andrew9

  • 懷疑的國中生
  • **
  • 文章數: 41
    • 檢視個人資料
請問有關於syslogd
« 於: 2006-05-13 11:00 »
主要是針對/var/log/messages這個日誌

以下是我的/etc/syslog.conf 其中一段內容:

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;auth.none;cron.none   /var/log/messages

我認為這段話意思是否為/var/log/messages中記錄除去mail、news、auth、authpriv和cron之外的所有系統訊息。也就是說它會記錄您自己的http、iptables訊息。是否這樣呢?我自己安裝了一個httpd,並且指定日誌到另外一個文件,例如/usr/website/log/httplog。我雖然可以在/usr/website/log/httpdlog中看到我的httpd的日誌訊息,但是我執行

cat /var/log/messages|grep HTTP

卻得到空值

我在別的地方得到的答案是:syslogd不會記錄你沒有要求它記錄的信息,雖然有上面有*.info但是這個*是不包括你自己的服務的。

基於別人給的這樣的概念:對於自己的觀念還是無法打通,那麼iptables也沒有在我的syslog.conf中要求,那為什麼它會記錄到/var/log/messages呢?還是說iptables自己定義了呢!

希望前輩能提供更合適的解釋 :D

creative1223

  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
請問有關於syslogd
« 回覆 #1 於: 2006-05-13 11:53 »
你可以觀察一下各系統的設定檔
有些設定檔已經把log的相關設定給定義好了
這樣你會比較明了

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
Re: 請問有關於syslogd
« 回覆 #2 於: 2006-05-13 12:39 »
引述: "andrew9"
主要是針對/var/log/messages這個日誌

以下是我的/etc/syslog.conf 其中一段內容:

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;news.none;authpriv.none;auth.none;cron.none   /var/log/messages

我認為這段話意思是否為/var/log/messages中記錄除去mail、news、auth、authpriv和cron之外的所有系統訊息。也就是說它會記錄您自己的http、iptables訊息。是否這樣呢?我自己安裝了一個httpd,並且指定日誌到另外一個文件,例如/usr/website/log/httplog。我雖然可以在/usr/website/log/httpdlog中看到我的httpd的日誌訊息,但是我執行

cat /var/log/messages|grep HTTP

卻得到空值

我在別的地方得到的答案是:syslogd不會記錄你沒有要求它記錄的信息,雖然有上面有*.info但是這個*是不包括你自己的服務的。

基於別人給的這樣的概念:對於自己的觀念還是無法打通,那麼iptables也沒有在我的syslog.conf中要求,那為什麼它會記錄到/var/log/messages呢?還是說iptables自己定義了呢!

希望前輩能提供更合適的解釋 :D


不是,你的觀念有點奇怪。

程式要把訊息紀錄於某個檔案,要有該功能的方式一般有兩種:

代碼: [選擇]
1. 程式自行開啟指定的檔案來輸出紀錄訊息內容。
2. 程式使用 syslog() 系統呼叫來輸出紀錄訊息內容。


==

第一種方式很常見,比方一般安裝的 apache 這類服務程式,可以使用 ErrorLog CustomLog 來指定輸出的紀錄檔案名稱。

代碼: [選擇]
ErrorLog /var/log/httpd/error_log
CustomLog /var/log/httpd/access_log common


簡單說,程式自己開啟檔案來記錄該訊息內容。

==

第二種方式是透過系統 syslog() 函數呼叫,一般程式設計就可以使用該方式來紀錄訊息。來看一下函數呼叫方式:

man 3 syslog

代碼: [選擇]

SYSLOG(3)                  Linux Programmer's Manual                 SYSLOG(3)

NAME
       closelog, openlog, syslog - send messages to the system logger

SYNOPSIS
       #include <syslog.h>

       void openlog(const char *ident, int option, int facility);
       void syslog(int priority, const char *format, ...);
       void closelog(void);

       #include <stdarg.h>

       void vsyslog(int priority, const char *format, va_list ap);


比方我程式這樣寫:

代碼: [選擇]
openlog("myprogram",0,LOG_USER);
syslog(LOG_INFO,"this is program output message");
closelog();


而 syslog() 呼叫部份的訊息紀錄到哪邊去了?一般系統開機後會啟動 syslogd 與 klogd 這類常駐服務程式,所以該呼叫訊息會由這類程式接收。syslog/klogd 這類程式會讀取 /etc/syslog.conf 檔案,然後依照 facility 與 priority 的設定決定接收的訊息要放哪個檔案內‧

==

所以整個問題點拉回來,你要先確認程式到底是自己開啟檔案來紀錄訊息,還是呼叫 syslog() 這類 syscall 來達成訊息紀錄的結果。

==
I am kenduest - 小州

my website: http://kenduest.sayya.org/