syslog 调试分析
时间:2009-07-22 来源:fewlife
by tangke <[email protected]> 2009-06-02
我们的程序一般都会产生输出信息。但是服务器程序一般却不希望输出信息到屏幕上,因为没有人盯着你的程序执行。所以我们要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。
但如果我们的程序要自己生成一个文件来保存日志却不是好主意,因为这一方面增加了维护程序运行的人的负担,另一方面自己维护起系统来也多有不便。在 Linux系统中有一个系统日志,通常放在/var/log目录下,比如文件名是 syslog的,系统中的一些程序产生的日志信息都会存放到这个文件里。
日志文件有固定的格式,比如
第1列是消息产生的时间,
第2列是机器名(因为日志记录程序支持远程连接),
第3列是标记信息(一般就是程序名称)等。
而且对应的有一些工具来对这个日志进行维护,比如通过轮回机制保证日志文件大小不会把磁盘空间占尽。所以我们把自己程序的信息也写到这个系统日志里是比较好的想法。
在GNU C语言库提供的内容中,有接口可以用来做这件事。
用下面的命令查看: nm -D /lib/libc.so.6 | grep log 可以看到一些调用:
000b9410 T closelog
0008b870 T getlogin
0008b960 T getlogin_r
000d0180 T __getlogin_r_chk
000bd190 T klogctl
00027450 T __open_catalog
000b9380 T openlog
0008bae0 T setlogin
000b8b80 T setlogmask
000b9350 T syslog
000b9320 T __syslog_chk
000b92f0 T vsyslog
000b8da0 T __vsyslog_chk
这里面的三个函数openlog, syslog, closelog是一套系统日志写入接口。
另外那个vsyslog和syslog功能一样,只是参数格式不同。
程序的用法示例代码如下:
#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;
}
我们的程序一般都会产生输出信息。但是服务器程序一般却不希望输出信息到屏幕上,因为没有人盯着你的程序执行。所以我们要把一些信息写成日志文件,正常情况下运行程序的人不用关心日志里的内容,只有在出现问题的时候才会查看日志文件里的内容以确定问题所在。
但如果我们的程序要自己生成一个文件来保存日志却不是好主意,因为这一方面增加了维护程序运行的人的负担,另一方面自己维护起系统来也多有不便。在 Linux系统中有一个系统日志,通常放在/var/log目录下,比如文件名是 syslog的,系统中的一些程序产生的日志信息都会存放到这个文件里。
日志文件有固定的格式,比如
第1列是消息产生的时间,
第2列是机器名(因为日志记录程序支持远程连接),
第3列是标记信息(一般就是程序名称)等。
而且对应的有一些工具来对这个日志进行维护,比如通过轮回机制保证日志文件大小不会把磁盘空间占尽。所以我们把自己程序的信息也写到这个系统日志里是比较好的想法。
在GNU C语言库提供的内容中,有接口可以用来做这件事。
用下面的命令查看: nm -D /lib/libc.so.6 | grep log 可以看到一些调用:
000b9410 T closelog
0008b870 T getlogin
0008b960 T getlogin_r
000d0180 T __getlogin_r_chk
000bd190 T klogctl
00027450 T __open_catalog
000b9380 T openlog
0008bae0 T setlogin
000b8b80 T setlogmask
000b9350 T syslog
000b9320 T __syslog_chk
000b92f0 T vsyslog
000b8da0 T __vsyslog_chk
这里面的三个函数openlog, syslog, closelog是一套系统日志写入接口。
另外那个vsyslog和syslog功能一样,只是参数格式不同。
程序的用法示例代码如下:
#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;
}
相关阅读 更多 +