Linux的日志系统一直以来都是在linux上开发必学的一部分内容。之前在学习OpenStack的时候,在对openstack组件的发生的错误进行调试时,老师就说要多看日志的报错,从这里找到相关线索再去修改配置文件。结果很多的报错都是通过组件对应的日志文件反映出来而修改成功的,因此使用好linux日志系统对了解linux编程有很大的帮助。
日志文件简述
其中日志一般都在/var/log目录下。该目录下有以下几个重要的的日志文件。
/var/log/maillog:记录邮件的往来信息,其实主要是记录sendmail与dovecot所产生的信息。
/var/log/dmesg:记录开机开始到现在的内核检测过程所产生的各项信息。如果内核编程的模块中使用printk(),将会把相关信息打印到这里。
/var/log/messages:系统发生的重要信息或者是错误信息都会记录在这个文件中,如果系统发生错误,这个文件就是需要查阅的文件之一。
/var/log/httpd:这个文件里面主要记录各种网络服务信息。
/var/log/cron:这个日志跟例行工作调度有关。即crontab有没有被执行,执行过程中有没有发生错误,在这个日子中均有体现。
打印日志文件
1.内核打印日志
- #include<linux/security.h>
- #include<linux/sysctl.h>
- static unsigned long long count = 0;
- int task_create_hook(unsigned long clone_flags)
- {
- printk("[+geek] call task_create(). count=%llu\n", ++count);
- return 0;
- }
- static struct security_operations geek_ops = {
- .name = "geek",
- .task_create = task_create_hook,
- };
- static __init int geek_init(void)
- {
- printk("[+geek] loading...\n");
- if(register_security(&geek_ops)){
- printk("[+geek] register faild\n");
- }
- return 0;
- }
- security_initcall(geek_init);
在linux中使用dmesg命令即可查看内核输出的日志。
2.非内核编程打印日志
- #include <syslog.h>
- int main(int argc, char **argv)
- {
- openlog("MyMsgMARK", LOG_CONS | LOG_PID, 0);
- syslog(LOG_DEBUG,
- "This is a syslog test message generated by program '%s'\n",
- argv[0]);
- closelog();
- return 0;
- }
编译生成可执行程序后,运行一次程序将向/var/log/syslog文件添加一行信息如下:
1
|
Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program
'./a.out'
|
Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program './a.out'
![](https://i-blog.csdnimg.cn/blog_migrate/8a5b0e8f6568590fd57dc6cbed49a776.png)
如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。
rsyslog
- #Mylog
- local2.* /var/log/mylog
- #include <syslog.h>
- int main(int argc, char **argv)
- {
- openlog("MyLog", LOG_CONS | LOG_PID, LOG_LOCAL2);
- syslog(LOG_INFO,
- "This is a syslog test message generated by program '%s'\n",
- argv[0]);
- closelog();
- return 0;
- }
![](https://i-blog.csdnimg.cn/blog_migrate/8a5b0e8f6568590fd57dc6cbed49a776.png)
转载自:https://i-blog.csdnimg.cn/blog_migrate/8a5b0e8f6568590fd57dc6cbed49a776.png