日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux syslog 笔记

發布時間:2023/12/10 linux 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux syslog 笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址

Linux日記系統由系統日志監控程序syslogd和內核日志監控程序klogd組成。從它們的命名可以看到,這兩個監控程序都是守護程序(daemon),且都注冊成了系統服務。換句話說,我們可以在目錄/etc/init.d/下找到它們對應的執行程序,并通過service命令對它們進行啟動,關閉,重啟等操作。/etc/syslog.conf文件是Linux日記系統的配置文件。下面是本人/etc/syslog.conf文件內容(ubuntu下為/etc/rsyslog.conf)

?

?

  • #?Log?all?kernel?messages?to?the?console.??
  • #?Logging?much?else?clutters?up?the?screen.??
  • #kern.*?????????????????????????????????????????????????/dev/console??
  • ?
  • #?Log?anything?(except?mail)?of?level?info?or?higher.??
  • #?Don't?log?private?authentication?messages!???
  • *.info;mail.none;authpriv.none;cron.none????????????????/var/log/messages??
  • ?
  • #?The?authpriv?file?has?restricted?access.???
  • authpriv.*??????????????????????????????????????????????/var/log/secure??
  • ?
  • #?Log?all?the?mail?messages?in?one?place.???
  • mail.*??????????????????????????????????????????????????-/var/log/maillog??
  • ?
  • ?
  • #?Log?cron?stuff???
  • cron.*??????????????????????????????????????????????????/var/log/cron??
  • ?
  • #?Everybody?gets?emergency?messages???
  • *.emerg?????????????????????????????????????????????????*??
  • ?
  • #?Save?news?errors?of?level?crit?and?higher?in?a?special?file.???
  • uucp,news.crit??????????????????????????????????????????/var/log/spooler??
  • ?
  • #?Save?boot?messages?also?to?boot.log???
  • local7.*????????????????????????????????????????????????/var/log/boot.log??
  • ?

    在對這個配置文件進行詳細的解釋之前,我們先看一下在Linux C編程中如何利用syslog進行日記。

    syslog APIs

    Linux C中提供一套系統日記寫入接口,包括三個函數:openlog,syslog和closelog。

    調用openlog是可選擇的。如果不調用openlog,則在第一次調用syslog時,自動調用openlog。調用closelog也是可選擇的,它只是關閉被用于與syslog守護進程通信的描述符。

    下面是這三個函數的調用格式:

  • #include?<syslog.h>???
  • void?openlog(char?*ident,?int?option,?int?facility); ??
  • void?syslog(int?priority,?char?*format,?...); ??
  • void?closelog();??
  • ?

    其中openlog和closelog都是可選的。不過,通過調用openlog,我們www.linuxidc.com可以指定ident參數。這樣,ident將被加到每條日記記錄中。ident一般設成程序的名字,如在下面例子中的"testsyslog":

  • #include?<syslog.h>???
  • ??
  • int?main(int?argc,?char?*argv[]) ??
  • { ??
  • ????openlog("testsyslog",?LOG_CONS?|?LOG_PID,?0); ??
  • ????syslog(LOG_USER?|?LOG_INFO,?"syslog?test?message?generated?in?program?%s?\n",?argv[0]); ??
  • ????closelog(); ??
  • ????return?0; ??
  • }??
  • ?

    編譯生成可執行文件后,每運行一次,程序將往/var/log/messages添加一條如下的記錄:

  • Apr?23?17:15:15?lirong-920181?testsyslog[27214]:?syslog?test?message?generated?in?program?./a.out??
  • ?

    格式基本是:timestamp hostname ident[pid]:log message。其中ident就是我們調用openlog是指定的"testsyslog",而之所以會打印出[27214]是openlog的option參數中指定了LOG_PID。下面我們詳細討論openlog函數中的option,facility和syslog函數中的priority參數。

    根據/usr/include/sys/syslog.h文件,我們可以看到syslog支持的option如下:

  • /*??
  • ?*?Option?flags?for?openlog.??
  • ?*??
  • ?*?LOG_ODELAY?no?longer?does?anything.??
  • ?*?LOG_NDELAY?is?the?inverse?of?what?it?used?to?be.??
  • ?*/?
  • #define?LOG_PID?????0x01????/*?log?the?pid?with?each?message?*/??
  • #define?LOG_CONS????????????0x02????/*?log?on?the?console?if?errors?in?sending?*/??
  • #define?LOG_ODELAY??0x04????/*?delay?open?until?first?syslog()?(default)?*/??
  • #define?LOG_NDELAY??0x08????/*?don't?delay?open?*/??
  • #define?LOG_NOWAIT??0x10????/*?don't?wait?for?console?forks:?DEPRECATED?*/??
  • #define?LOG_PERROR??0x20????/*?log?to?stderr?as?well?*/??
  • 我們可以通過與操作結合這些option。syslog支持的faclility如下:

  • /*?facility?codes?*/?
  • #define?LOG_KERN????????????(0<<3)????/*?kernel?messages?*/??
  • #define?LOG_USER????????????(1<<3)????/*?random?user-level?messages?*/??
  • #define?LOG_MAIL????????????(2<<3)????/*?mail?system?*/??
  • #define?LOG_DAEMON??(3<<3)????/*?system?daemons?*/??
  • #define?LOG_AUTH????????????(4<<3)????/*?security/authorization?messages?*/??
  • #define?LOG_SYSLOG??(5<<3)????/*?messages?generated?internally?by?syslogd?*/??
  • #define?LOG_LPR?????(6<<3)????/*?line?printer?subsystem?*/??
  • #define?LOG_NEWS????????????(7<<3)????/*?network?news?subsystem?*/??
  • #define?LOG_UUCP????????????(8<<3)????/*?UUCP?subsystem?*/??
  • #define?LOG_CRON????????????(9<<3)????/*?clock?daemon?*/??
  • #define?LOG_AUTHPRIV????(10<<3)???/*?security/authorization?messages?(private)?*/??
  • #define?LOG_FTP?????(11<<3)???/*?ftp?daemon?*/??
  • facility的ID(上面對應的數值)與名字的對應關系如下:

  • {?"auth",?LOG_AUTH?}, ??
  • {?"authpriv",?LOG_AUTHPRIV?}, ??
  • {?"cron",?LOG_CRON?}, ??
  • {?"daemon",?LOG_DAEMON?}, ??
  • {?"ftp",?LOG_FTP?}, ??
  • {?"kern",?LOG_KERN?}, ??
  • {?"lpr",?LOG_LPR?}, ??
  • {?"mail",?LOG_MAIL?}, ??
  • {?"mark",?INTERNAL_MARK?},??????/*?INTERNAL?*/??
  • {?"news",?LOG_NEWS?}, ??
  • {?"security",?LOG_AUTH?},???????/*?DEPRECATED?*/??
  • {?"syslog",?LOG_SYSLOG?}, ??
  • {?"user",?LOG_USER?}, ??
  • {?"uucp",?LOG_UUCP?},??
  • 這個對應關系作用是是將syslog系統調用中facility ID和syslog.conf文件中的配置選項對應起來。后面將詳細講解。facility的作用是指明調用syslog應用的類型。syslog支持的priority如下:

  • #define?LOG_EMERG???0???/*?system?is?unusable?*/??
  • #define?LOG_ALERT???1???/*?action?must?be?taken?immediately?*/??
  • #define?LOG_CRIT????????????2???/*?critical?conditions?*/??
  • #define?LOG_ERR?????3???/*?error?conditions?*/??
  • #define?LOG_WARNING?4???/*?warning?conditions?*/??
  • #define?LOG_NOTICE??5???/*?normal?but?significant?condition?*/??
  • #define?LOG_INFO????????????6???/*?informational?*/??
  • #define?LOG_DEBUG???7???/*?debug-level?messages?*/??
  • priority的ID(上面對應的數值)與名字的對應關系如下:

  • {?"alert",?LOG_ALERT?}, ??
  • {?"crit",?LOG_CRIT?}, ??
  • {?"debug",?LOG_DEBUG?}, ??
  • {?"emerg",?LOG_EMERG?}, ??
  • {?"err",?LOG_ERR?}, ??
  • {?"error",?LOG_ERR?},???????/*?DEPRECATED?*/??
  • {?"info",?LOG_INFO?}, ??
  • {?"none",?INTERNAL_NOPRI?},?????/*?INTERNAL?*/??
  • {?"notice",?LOG_NOTICE?}, ??
  • {?"panic",?LOG_EMERG?},?????/*?DEPRECATED?*/??
  • {?"warn",?LOG_WARNING?},????????/*?DEPRECATED?*/??
  • {?"warning",?LOG_WARNING?},??
  • 這個對應關系的作用和facility情況是相同的,都是為了與syslog.conf文件中的配置選項對應起來。priority的作用是指明日記記錄的優先級,也可以理解成記錄時間的嚴重程度。在實際使用中,syslog函數中的priority參數實際上是前面提到的facility和priority的組合,通過與操作。

    回到前面提到的syslog.conf文件和testsyslog的程序,根據前面的分析,我們來研究一下為什么testsyslog會將日記記錄寫到文件/var/log/messages中,而不是別的文件。

    syslog.conf文件行的基本語法是這樣的:

    [消息類型(規則)]???? [處理方案(日記文件)]

    這里需要注意的是,兩者之間必須用一個或者多個Tab字符分開。消息類型是由”消息來源“(facility)和”緊急程度“(priority)構成,中間點號連接。如前面syslog.conf文件中的news.crit表示來自news的”關鍵“狀況。這里,news表示消息來源,crit表示關鍵狀況。通配符*表示一切消息來源,如第一條規則:*.info,將info級以上(notice,warning, err, alert, emerg)(priority表)的所有消息發送到日記文件/var/log/messages。而testsyslog程序中,調用syslog函數時指定的priority是LOG_USER | LOG_INFO,根據上面提到的ID和名字對應的關系,對應的消息類型規則是user.info,包含在規則*.info中,所以日記記錄會寫到/var/log/messages。

    修改syslog.conf文件

    一般來說,我們希望能夠為自己的應用程序指定特定的日記文件。這時候,我們就需要修改syslog.conf文件。假設我們現在要把調試(debug)日記記錄寫到文件/var/log/debug文件中。第一步要做的是,在syslog.conf文件添加如下消息規則作為第一條規則:

  • user.debug??????????????????/var/log/debug??
  • 要是添加的新規則生效,第二步我們需要重啟syslogd和klogd:service syslog restart(ubuntu下為/etc/init.d/rsyslog restart)

    為了測試新規則是否生效,我們可以將testsyslog修改如下:

  • #include?<syslog.h>???
  • ??
  • int?main(int?argc,?char?*argv[]) ??
  • { ??
  • ????openlog("testsyslog",?LOG_CONS?|?LOG_PID,?0); ??
  • ????syslog(LOG_USER?|?LOG_DEBUG,?"syslog?test?message?generated?in?program?%s?\n",?argv[0]); ??
  • ????closelog(); ??
  • ????return?0; ??
  • }??
  • 編譯生成執行文件后,每運行一次,/var/log/debug文件都會增加一條新的記錄

    總結

    以上是生活随笔為你收集整理的linux syslog 笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。