<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          Linux中使用syslog進行日志的打印 您所在的位置:網(wǎng)站首頁 遷移宮面相李雙林 Linux中使用syslog進行日志的打印

          Linux中使用syslog進行日志的打印

          2024-06-01 02:32| 來源: 網(wǎng)絡整理| 查看: 265

          對于一個從單片機開發(fā)轉(zhuǎn)向作系統(tǒng)中的應用程序開發(fā)的攻城獅來說,對程序的調(diào)試方法的轉(zhuǎn)換也是非常重要的。單片機的開發(fā),一般使用jlink進行單步調(diào)試較多,但是對于在作系統(tǒng)上進行應用程序一般都是比較龐大的,所以再使用單片機開發(fā)的調(diào)試思維就不現(xiàn)實啦。最常見的就是使用printf打印與syslog日志打印,對于printf的使用比較簡單,所以這里主要介紹一下syslog的用法。

          syslog的調(diào)試信息的打印是后臺運行的,不占用控制臺。并且可以進行調(diào)試信息級別的控制,這樣可以避免輸出很多無用的信息,讓觀看者可以更快的找到希望看到的信息。

          函數(shù)介紹

          對于linux系統(tǒng)中提供的日志打印服務,提供了一些庫函數(shù),一般使用的就是三個,openlog()、syslog()、closelog()

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

          ?void openlog(const char *ident, int option, int facility);? 用于打開系統(tǒng)記錄

          ident ? 指向的字符串可以是想要打出的任意字符,它所表示的字符串將固定地加在每行日志的前面以標識這個日志,該標志通常設置為程序的名稱。.option ?參數(shù)所指定的標志用來控制openlog()作和syslog()的后續(xù)調(diào)用。他的值為具體是下列值取或運算的結果

          LOG_CONS 直接寫入系統(tǒng)控制臺,如果有一個錯誤,同時發(fā)送到系統(tǒng)日志記錄。 LOG_NDELAY 立即打開連接(通常,打開連接時記錄的第一條消息)。 LOG_NOWAIT 不要等待子進程,因為其有可能在記錄消息的時候就被創(chuàng)建了(GNU C庫不創(chuàng)建子進程,所以該選項在Linux上沒有影響。) LOG_ODELAY 延遲連接的打開直到syslog函數(shù)調(diào)用。(這是默認情況下,需要沒被指定的情況下。) LOG_PERROR (不在SUSv3情況下)同時輸出到stderr(標準錯誤文件)。 LOG_PID 包括每個消息的PID。

          facility參數(shù)是用來指定記錄消息程序的類型。它讓指定的配置文件,將以不同的方式來處理來自不同方式的消息。它的值可能為 LOG_KERN、LOG_USER、LOG_MAIL、LOG_DAEMON、LOG_AUTH、LOG_SYSLOG、LOG_LPR、LOG_NEWS、LOG_UUCP、LOG_CRON 或 LOG_AUTHPRIV。具體每一個值的含義可以查看man手冊,本人的英語水平有限,這里就不做詳解了。但是對于一般的使用者都會使用默認的 LOG_USER facility The facility argument is used to specify what type of program is logging the message. This lets the configuration file specify that messages from different facilities will be handled differently. LOG_AUTH security/authorization messages LOG_AUTHPRIV security/authorization messages (private) LOG_CRON clock daemon (cron and at) LOG_DAEMON system daemons without separate facility value LOG_FTP ftp daemon LOG_KERN kernel messages (these can't be generated from user processes) LOG_LOCAL0 through LOG_LOCAL7 reserved for local use LOG_LPR line printer subsystem LOG_MAIL mail subsystem LOG_NEWS USENET news subsystem LOG_SYSLOG messages generated internally by syslogd(8) LOG_USER (default) generic user-level messages LOG_UUCP UUCP subsystem

          void syslog(int priority, const char *format, ...);? ?記錄至系統(tǒng)記錄

          priority? 指的是調(diào)試信息的優(yōu)先級,跟內(nèi)核中的printk函數(shù)類似。內(nèi)核中定義的各種級別如下:

          LOG_EMERG:緊急情況,需要立即通知技術人員。 LOG_ALERT:應該被立即改正的問題,如系統(tǒng)數(shù)據(jù)庫被破壞,ISP連接丟失。 LOG_CRIT:重要情況,如硬盤錯誤,備用連接丟失。 LOG_ERR:錯誤,不是非常緊急,在一定時間內(nèi)修復即可。 LOG_WARNING:警告信息,不是錯誤,比如系統(tǒng)磁盤使用了85%等。 LOG_NOTICE:不是錯誤情況,也不需要立即處理。 LOG_INFO:情報信息,正常的系統(tǒng)消息,比如騷擾報告,帶寬數(shù)據(jù)等,不需要處理。 LOG_DEBUG:包含詳細的開發(fā)情報的信息,通常只在調(diào)試一個程序時使用。

          void closelog(void);? ?關閉日志文件,這個函數(shù)就沒有什么好說的啦,沒有任何參數(shù),直接關閉日志文件。

          應用實踐 #include #include #include #include int main(void) { printf("my pid = %d.\n", getpid()); /*在日志中雖然寫了文件名,但是出于準確考慮,也會顯示該進程的pid,因為pid才是一個進程的唯一標識*/ openlog("a.out", LOG_PID | LOG_CONS, LOG_USER); syslog(LOG_INFO, "this is my log info.%d", 23); //使用方法與printk 類似可以格式化的輸出 syslog(LOG_INFO, "this is another log info."); syslog(LOG_INFO, "this is 3th log info."); closelog(); }

          在Ubuntu中日志在/var/log/syslog文件中,不同linux的發(fā)行版路徑會不一樣,其他的日志可能會在/var/log/messages

          ?

          syslog的工作原理

          (1)作系統(tǒng)中有一個守護進程syslogd(開機運行,關機時才結束),這個守護進程syslogd負責進行日志文件的寫入和維護。

          (2)syslogd是獨立于我們?nèi)我庖粋€進程而運行的。我們當前進程和syslogd進程本來是沒有任何關系的,但是我們當前進程可以通過調(diào)用openlog打開一個和syslogd相連接的通道,然后通過syslog向syslogd發(fā)消息,然后由syslogd來將其寫入到日志文件系統(tǒng)中。

          (3)syslogd其實就是一個日志文件系統(tǒng)的服務器進程,提供日志服務。任何需要寫日志的進程都可以通過openlog/syslog/closelog這三個函數(shù)來利用syslogd提供的日志服務。這就是作系統(tǒng)的服務式的設計。

          ?

          注明:本博客是根據(jù)朱有鵬老師的l《linux嵌入式核心課程》視頻所作的總結

          ?



          【本文地址】

          公司簡介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實驗室設備網(wǎng) 版權所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 沧州市| 胶州市| 右玉县| 竹北市| 威信县| 土默特左旗| 印江| 西乌珠穆沁旗| 高唐县| 昌吉市| 环江| 巢湖市| 金寨县| 北海市| 芦溪县| 孝感市| 普安县| 海南省| 沁阳市| 岱山县| 胶州市| 上思县| 黑山县| 赣州市| 霍林郭勒市| 蒲江县| 金华市| 香格里拉县| 仁化县| 东乌珠穆沁旗| 甘谷县| 榆树市| 图木舒克市| 三原县| 富川| 南溪县| 杂多县| 齐齐哈尔市| 镇康县| 南川市| 浑源县| http://444 http://444 http://444 http://444 http://444 http://444