syslog - 日志文件詳解


日志文件,是linux最為重要的記錄文件,記錄着日常的操作。
我們在linux編程的時候,通常會使用日志文件記錄操作和信息,日志系統提供了我們幾個API接口供調用

1. API

void openlog(const char *ident, int option, int facility);  //關聯日志文件
void syslog(int priority, const char *format, ...);         //寫入信息
void closelog(void);                                        //關閉關聯

參數

  • ident: 一般設置為程序名,如果為NULL, 則默認為本程序名;將該指向的程序輸出的信息寫入到syslog中
  • option:
option Description
LOG_CONS 如果信息無法寫入到syslog,那么直接打印到控制端
LOG_NDELAY 立刻開啟鏈接到syslog
LOG_NOWAIT 不要等待可能建立的子進程
LOG_ODELAY 與LOG_NDELAY相反
LOG_PERROR 錯誤信息也打印到stderr
LOG_PID 每次打印信息,都加上進程的ID號
  • facility: 程序以何種方式打印信息
facility Description
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_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
  • priority: 信息的重要程度,為 facility | level(按位或),level的值如下:
level Description
LOG_EMERG system is unusable
LOG_ALERT action must be taken immediately
LOG_CRIT critical conditions
LOG_ERR error conditions
LOG_WARNING warning conditions
LOG_NOTICE normal, but significant, condition
LOG_INFO informational message
LOG_DEBUG debug-level message

2. 清空/誤刪syslog

有的時候,我們需要清空syslog的所有信息,以便我們使用它調試我們的項目。
但是,新手往往不知道如何清空syslog這個日志文件:

  • 正確方式:
cat /dev/null > /etc/init.d/syslog
  • 錯誤方式:
    1. 直接 rm -f /etc/init.d/syslog
    1. vim /etc/init.d/syslog,然后刪除所有內容

解決辦法:

  • 錯誤1后,千萬不能自己touch一個syslog出來,這樣根本寫不進去的;
  • 錯誤2后,一定記得也把這個syslog文件刪除
  • 重啟syslogd這個守候進程: /etc/init.d/rsyslog restart (ubuntu為例)
  • syslog會自動生成

當然網上也有其它說法,但我的ubuntu是采用以上方式完成重建的,試了其它的博客說的方法都是無效的。

對了,我的ubuntu的版本是:

root@jimmy-vm:~# uname -a
Linux jimmy-vm 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
root@jimmy-vm:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04 LTS
Release:        16.04
Codename:       xenial
root@jimmy-vm:~# cat /etc/issue
Ubuntu 16.04 LTS \n \l


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM