1、syslog簡介

syslog 是一種工業標准的協議,可用來記錄設備的日志。在UNIX系統,路由器、交換機等網絡設備中,系統日志(System Log)記錄系統中任何時間發生的大小事件。管理者可以通過查看系統記錄,隨時掌握系統狀況。UNIX的系統日志是通過syslogd這個進程記錄系統有關事件記錄,也可以記錄應用程序運作事件。通過適當的配置,我們還可以實現運行syslog協議的機器間通信,通過分析這些網絡行為日志,藉以追蹤掌握與設備和網絡有關的狀況。

2、syslog配置文件

syslog 設備依據兩個重要的文件:/etc/syslogd守護進程和/etc/syslog.conf配置文件。通常情況下,多數syslog信息被寫到 /var/adm或/var/log目錄下的信息文件中(messages.*)。一個典型的syslog記錄包括生成程序的名字和一個文本信息。它還包括一個設備和一個優先級范圍。

通過使用syslog.conf文件,可以對生成的日志的位置及其相關信息進行靈活的配置。該配置文件指明了syslogd守護程序記錄日志的行為,該程序在啟動時查詢配置文件。該文件由不同程序或消息分類的單個條目組成,每個占一行。對每類消息提供一個選擇域和一個動作域。這些域由tab隔開:

選擇域指明消息的類型和優先級;

動作域指明syslogd接收到一個與選擇標准相匹配的消息時所執行的動作。

syslog.conf行的基本語法是:

消息類型.優先級 動作域

其中,每個選擇域是由消息類型和優先級組成。當指明一個優先級時,syslogd將記錄一個擁有相同或更高優先級的消息。Linux中一些主要的消息類型如表2所示,表3列出了一些優先級信息:

表1 syslog消息類型

表2 syslog常用優先級

不同的服務類型有不同的優先級,數值較大的優先級涵蓋數值較小的優先級。如果某個選擇條件只給出了一個優先級而沒有使用任何優先級限定符,對應於這個優先級的消息以及所有更緊急的消息類型都將包括在內。比如說,如果某個選擇條件里的優先級是“warning”,它實際上將把“warning”、“err”、 “crit”、“alert“和“emerg”都包括在內。

syslog允許人們使用三種限定符對優先級進行修飾:星號(*)、等號(=)和嘆號(!):

星號(*)的含義是把本項服務生成的所有日志消息都發送到操作動作指定的地點。就像它在規則表達式里的作用一樣,星號代表“任何東西”。在前面給出的例子里,“mail.*”將把所有優先級的消息都發送到操作動作指定的/var/log/mail文件里。使用“*”限定符與使用“debug”優先級的效果完全一樣,后者也將把所有類型的消息發送到指定地點。

等號(=)的含義是只把本項服務生成的本優先級的日志消息都發送到操作動作指定的地點。比如說,可以用“=”限定符只發送調試消息而不發送其他更緊急的消息(這將為應用程序減輕很多負擔)。當你只需要發送特定優先級別的消息時,就要使用等號限定符。

嘆號(!)的含義是把本項服務生成的所有日志消息都發送到操作動作指定的地點,但本優先級的消息不包括在內。

所以,根據上面介紹的相關知識,我們給出如下例子作為示范:

(1)如果指明\"crit\",那所有標為crit、alert和emerg的消息將被記錄。每行的行動域指明當選擇域選擇了一個給定消息后應該把他發送到哪兒。例如,如果想把所有郵件消息記錄到一個文件中,如下所示:

#Log all the mail messages in one placemail.* /var/log/maillog

(2)其他設備也有自己的日志。UUCP和news設備能產生許多外部消息。它把這些消息存到自己的日志(/var/log/spooler)中並把級別限為\"err\"或更高。例如:

# Save news errors of level crit and higher in a special file.uucp,news.crit /var/log/spooler

(3)當一個緊急消息到來時,可能想讓所有的用戶都得到。也可能想讓自己的日志接收並保存。

#Everybody gets emergency messages, plus log them on anther machine*.emerg **.emerg @linuxaid.com.cn

(4)有時syslogd將產生大量的消息。例如內核(\"kern\"設備)可能很冗長,用戶很難看得清楚明了,那么用戶可能想把內核消息記錄到/dev/console中。下面的例子表明內核日志記錄被注釋掉了:

#Log all kernel messages to the console#Logging much else clutters up the screen#kern.* /dev/console

(5)用戶可以在一行中指明所有的設備。下面的例子把info或更高級別的消息送到/var/log/messages,除了mail以外。級別\"none\"禁止一個設備:

#Log anything(except mail)of level info or higher#Don\'t log private authentication messages!*.info:mail.none;autHPriv.none /var/log/messages

3、syslog進程

syslogd守護程序是由/etc/rc.d/init.d/syslog腳本在運行級2下被調用的,缺省不使用選項。但有兩個選項-r和-h很有用:

如果將要使用一個日志服務器,必須調用syslogd -r。缺省情況下syslogd不接受來自遠程系統的信息。當指定-r選項,syslogd將會監聽從514端口上進來的UDP包。

如果還希望日志服務器能傳送日志信息,可以使用-h標志。缺省時,syslogd將忽略使其從一個遠程系統傳送日志信息到另一個系統的syslogd。

另外,如果需要重新啟動syslog守護進程(/etc/syslog.conf的修改只有在syslog守護進程重新啟動后才會生效),並且只想重新啟動syslog守護進程而不是整個系統,在Red Hat Linux機器上,執行以下兩條命令之一即可:

/etc/rc.d/init.d/syslogstop;/etc/rc.d/init.d/syslogstart/etc/rc.d/init.d/syslogrestart

4、靈活運用syslog調用接口

在實際的使用過程中,我們可以通過配置文件和查看相應的日志文件來使用syslog。然而,在許多應用場景下,我們往往需要通過程序產生輸出信息並進行記錄,也就是說要把一些信息寫成日志文件,正常情況下運行程序的人不用關心日志里的內容,只有在出現問題的時候才會查看日志文件里的內容以確定問題所在。因此,下面將詳細介紹如何通過syslog日志系統提供的API調用接口,來使用程序實現對syslog的使用。

1.主要的函數

在Linux中,提供了四個有關syslog日志系統的系統調用,供用戶使用:

openlog:打開日志設備,以供讀取和寫入,與文件系統調用的open類似;

syslog:寫入日志,與文件系統調用的write類似;

closelog:關閉日志設備,與文件系統調用的close類似;

vsyslog:它和syslog功能一樣,負責寫入日志,只是參數格式不同。

(1)openlog函數

該函數的聲明如下:

void openlog(const char *ident, int option, int facility);

此函數用來打開一個到系統日志記錄程序的連接,打開之后就可以用syslog或vsyslog函數向系統日志里添加信息了。而closelog函數就是用來關閉此連接的。

openlog 的第一個參數ident是一個標記,ident所表示的字符串將固定地加在每行日志的前面以標識這個日志,通常就寫成當前程序的名稱以作標記。第二個參數 option一般是下列選項值取“與”運算(使用“|”表示,如“LOG_CONS | LOG_PID”)的結果:

LOG_CONS:如果送到system logger時發生問題,直接寫入系統終端;

LOG_NDELAY:立即開啟連接,通常連接是在第一次寫入消息時才打開的;

LOG_PERROR:將消息也同時送到stderr設備;

LOG_PID:將進程PID含入所有消息中。

第三個參數facility指明記錄日志的程序的類型,它主要具有如下幾類日志類型:

LOG_AUTH :安全/授權消息

LOG_AUTHPRIV:安全/授權消息

LOG_CRON:時間守護進程(cron和at)專用

LOG_DAEMON:其它系統守護進程

LOG_KERN:核心消息

LOG_LOCAL0到LOG_LOCAL7:系統保留

LOG_LPR:printer子系統

LOG_MAIL:mail子系統

LOG_NEWS:USENET新聞子系統

LOG_SYSLOG:syslogd進程內部所產生的消息

LOG_USER(缺省):一般使用者缺省使用消息

LOG_UUCP:UUCP子系統

LOG_FTP:FTP子系統使用

(2)syslog函數

syslog函數的聲明如下:

void syslog(int priority, const char * message, ...);

第一個參數是消息的緊急級別priority,第二個參數是消息及其格式,之后是格式對應的參數,如同C語言里面printf輸出函數一樣使用,具體的格式這里就不再詳述,它不是本書介紹的重點。

這里還需要詳細介紹一下第一個參數priority,它是由severity level和facility組成的。Facility已經在上面介紹了,下面介紹一下severity level,也就是消息的重要級別,它主要包括:

LOG_EMERG:緊急狀況

LOG_ALERT:高優先級問題,比如說數據庫崩潰等,必須要立即采取反應行動

LOG_CRIT:重要狀況發生,比如硬件故障

LOG_ERR:錯誤發生

LOG_WARNING:警告發生

LOG_NOTICE:一般狀況,需要引起注意

LOG_INFO:信息狀況

LOG_DEBUG:調試消息

在實際使用中,如果我們的程序要使用系統日志功能,只需要在程序啟動時使用openlog函數來連接syslogd程序,后面隨時用syslog函數寫日志就行了。

(3)closelog函數

相對上述2個函數來說,該函數非常簡單,其聲明如下:

void closelog( void );

值得注意的是,雖然該函數的使用和調用情況非常簡單,但是是必不可少的,因為在Linux系統中,打開的日志也是資源,如果只使用openlog函數打開日志,而忘記使用closelog關閉日志的話,當打開的日志數量累積到一定程度,便會造成內存不足,從而引起系統問題。所以,提醒用戶在使用中特別注意。

2.一個實際的程序調用例子

下面給出一個使用上述幾個函數寫日志的例子,以供大家參考:

#include

#include

#include

int main(void)

{

int log_test;

/*打開日志*/

openlog("log_test ", LOG_PID|LOG_CONS, LOG_USER);

/*寫日志*/

syslog(LOG_INFO, "PID information, pid=%d", getpid());

syslog(LOG_DEBUG,"debug message ");

/*關閉日志*/

closelog();

}

轉自 http://weisjohn.blog.163.com/blog/static/310152562012326113450226/

linux syslog原理,Linux日志管理之詳解 syslog/vsyslog相关推荐

  1. linux系统中的日志管理

    Linux系统中的日志管理 1 实验环境 2 journald日志服务 2.1 journalctl命令的用法 2.2 用journald服务永久存放日志 3 rsyslog日志服务 3.1 自定义日 ...

  2. 10、Linux系统中的日志管理及时间设定

    Linux系统中的日志管理 实验环境 一.journald 1.journalctl命令的用法 2.永久存放日志 二.rsyslog 1.自定义日志采集路径 2.日志的远程同步 3.更改日志采集格式 ...

  3. Linux计划任务与日志管理

    计划任务-at-cron-计划任务使用方法 日志的种类和记录方式-自定义ssh服务日志类型和存储位置 实战-日志切割-搭建远程日志收集服务器 实战-配置公司内网服务器每天定时自动开关机 1.计划任务- ...

  4. Linux学习-66-系统日志管理

    15 Linux系统日志管理 系统日志详细地记录了在什么时间,哪台服务器.哪个程序或服务出现了什么情况.不管是哪种操作系统,都详细地记录了重要程序和服务的日志,只是我们很少养成查看日志的习惯. 日志是 ...

  5. linux日志管理命令详解

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://navyaijm.blog.51cto.com/4647068/816625 志对 ...

  6. 2.3 Linux系统中的日志管理

    journald(systemd-journald.service) RHEL8加入了一个日志工具journald 默认日志存放地址/run/log/journal/22992d92cf33452b8 ...

  7. linux 随机数原理,Linux随机数生成器的原理和缺陷.pdf

    第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...

  8. linux随机数原理,Linux随机数生成器的原理与缺陷.pdf

    第17卷.第10期 计算机技术与发展 vol.17No.10 2007年10月 COMPUTERTECHNOLOGYANDDEVELOPMENT Oct.2007 Linux随机数生成器的原理及缺陷 ...

  9. linux acl原理,linux acl详细讲解

    Linux ACL 详细讲解 用户权限管理始终是 Unix 系统管理中最重要的环节.大家对 Linux/Unix 的 UGO 权限管理方式一定不陌生,还有最常用的 chmod 命令.为了实现一些比较复 ...

最新文章

  1. lol个服务器在线人数,LOL除国服外,全球在线人数达1380万,韩服最多380万
  2. Spring Security 实战干货:路径Uri中的 Ant 风格
  3. springboot 定时任务schedule
  4. 广告冷启动_超级推荐如何缩短冷启动时间,让流量快速注入店铺
  5. python中random库中shuffle_[宜配屋]听图阁 - 详解Python中打乱列表顺序random.shuffle()的使用方法...
  6. python中生成器的两段代码
  7. php正则表达式2,php正则表达式基本语法(2)
  8. sql server表分区_介绍分区表SQL Server增量统计信息
  9. java调用hp打印机驱动_惠普打印机驱动修改JDK问题–现象:javac不能用了 | 学步园...
  10. hibernate文档
  11. Objective-C(9)内存管理之ARC
  12. 如今表情包的天下,曾经可是颜文字和Emoji的啊...
  13. js实现——鼠标单击事件-onclick和双击事件-ondblclick
  14. 每日必读DZone News—Java中的随机数生成
  15. 040-云E办_学习和安装FastDFS以及安装Nginx
  16. 《我是黑社会》--郭德纲相声
  17. GBASE 8A v953报错集锦56--Hadoop 加载失败问题
  18. QT 幸运大转盘动画
  19. HCSR04超声波传感器驱动
  20. win10的ie11正确卸载与重新安装

热门文章

  1. 复数四则运算java_用java怎么实现复数的四则运算?需要从键盘上输入两个复数...
  2. 网易云邮箱如何添加网页企业级账号
  3. 大4女生想做软件测试岗,如何系统性学习测试呢?
  4. 信贷业务:常用风险指标
  5. 2d短草丛踩踏及idle效果
  6. 三只小猪的故事[漫画]
  7. php3d饼状图的教学,php使用Jpgraph创建3D饼形图效果示例
  8. 如何用好示波器?资深工程师也会忽略这些细节……
  9. Chrome浏览器标签管理插件–OneTab
  10. 如何修改PDF并调整页面尺寸大小