在ARM-Linux中使用syslog


在嵌入式系统中,因为存储空间等资源有限,不可能像在PC机上一样记录所有的系统运行日志。在嵌入式上syslog日志的目标只是记录相关程序的运行错误信息或由用户设置日志显示级别而查看相关的日志,以及调试程序时查看日志信息。在具体选择时,可以用一些syslogd项目提供的源代码,另外就是移植busybox中的syslogd程序。下面主要介绍从busybox中移植出syslogd.c的方法和步骤,然后再介绍syslog-ng包的编译和使用。

<!--[if !supportLists]-->1.1 <!--[endif]-->从Busybox移植syslogd

Busybox的根目录下有一个sysklogd目录,里面就是提供给busybox命令syslogd的程序代码,syslogd.c文件就是我们要分解出来的主文件。

<!--[if !supportLists]-->1.1.1 <!--[endif]-->编译syslogd步骤

其实方法很简单,只需把syslogd.c文件单独拷贝出来,单独编译:

#gcc –o syslogd syslogd.c

这过程中会有很多错误,根据错误原因在目录sysklogd和include下的查看相关的文件,把所需要的宏、结构定义、相关的函数原型等都拷贝到syslogd.c文件中,这样反复编译,直到编译成功,那么syslogd可执行程序就是我们需要的。

要注意的是,需要根据busybox-1.2.0/sysklogd/config.in文件中的解释,打开syslogd.c文件中的相关的宏定义,在我的程序中我打开了所有的宏定义。

附件中是我分离好的qsyslogd.c文件,已经编译通过并实验可以使用,

附件:qsyslogd

<!--[if !supportLists]-->1.1.2 <!--[endif]-->运行qsyslogd及验证

Qsyslogd有两个主要的选项:

<!--[if !supportLists]-->l <!--[endif]-->qsyslogd –R 192.168.21.49 表示把syslog信息通过网络传到192.168.21.49的机器上

<!--[if !supportLists]-->l <!--[endif]-->qsyslogd –L 表示在终端界面上显示syslog信息

建立文件mylog.c,并编译运行,

#include <syslog.h>

#include <stdio.h>

int main()

{

syslog(LOG_USER|LOG_INFO, "hello world, test logger ^_^\n");

return 0;

}

#gcc –o mylog mylog.c

#./mylog

查看文件/var/log/messages文件就可以看到我们输出的syslog日志信息了。

<!--[if !supportLists]-->1.2 <!--[endif]-->syslog-ng的编译和使用

syslog-ng是BalaBit公司开发和维护的,遵循GNU。意指下一代日志系统,www.britepic.org它建立了更好的消息过滤粒度。可以下载syslog-ng-1.6.9.tar.gz版本。编译只需configure make即可,编译后再src目录下生成bin文件syslog-ng,下一步运行syslog-ng即可。Syslog-ng运行时需要syslog-ng.conf配置文件。在运行时指定特定的配置文件就可以了,比如:

#syslog-ng –f /home/qibing/syslog-ng.conf

在目录sample下有各个系统配置文件的原型,可以在这些配置文件原型上做相应的修改,一般只需修改dmsg字段。要查看日志信息到dmsg字段指定的文件查看即可。

建立文件test.c并编译运行,

#include <syslog.h>

#include <stdio.h>

int main()

{

syslog(LOG_USER|LOG_INFO, "hello world, test logger ^_^\n");

return 0;

}

则到dmsg字段指定的文件中即可查看输出的日志信息。

相关内容