日志文件,是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
- 錯誤方式:
- 直接
rm -f /etc/init.d/syslog
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
