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
- 错误方式:
- 直接
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