怎样给嵌入式系统加syslog
现在发现在FPGA的网络有问题.用UDP所有服务都没有问题,但是TCP的所有服务都有问题,所以想在系统里加入SYSLOG,希望能找到错误信息,但上网查过都没有这方面的文章,请大家帮帮忙吧,怎样能让嵌人式LINUX里有log文件产生!谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
现在发现在FPGA的网络有问题.用UDP所有服务都没有问题,但是TCP的所有服务都有问题,所以想在系统里加入SYSLOG,希望能找到错误信息,但上网查过都没有这方面的文章,请大家帮帮忙吧,怎样能让嵌人式LINUX里有log文件产生!谢谢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(5)
man syslog
Linux程式设计-syslog
在Linux下有个syslogd的Daemon程式,syslog是个系统管理员必看的档案。因此,如果您的程式有除错或安全讯息要显示,写到syslog是个很好的选择。
syslog有三个函数,使用上,一般您只需要用syslog(...)这个函数即可,一般使用状况下,openlog/closelog是可有可无的。
syslog()中的priority是facility及level的组合,其後参数的用法与printf无异。
头文件:
#include <syslog.h>
void openlog( char *ident, int option, int facility)
void syslog( int priority, char *format, ...)
void closelog( void )
openlog( char *ident, int option, int facility)
ident
此字符串内容一般就是这个程序的名称,它会输出到日志文件中。
option
用於openlog()的option参数可以是以下几个的组合:
LOG_CONS : 如果送到system logger时发生问题,直接写入系统console。
LOG_NDELAY : 立即开启连接(通常,连接是在第一次写入讯息时才打开的)。
LOG_PERROR : 将讯息也同时送到stderr
LOG_PID : 将该程序的PID也写入到日志文件
facility
facility参数用来指定何种程式在记录讯息,这可让设定档来设定何种讯息如何处理。
LOG_AUTH : 安全/授权讯息
LOG_AUTHPRIV : 安全/授权讯息
LOG_CRON : 时间守护神专用(cron及at)
LOG_DAEMON : 其它系统守护神(如telnet,ftp等等)
LOG_KERN : 核心讯息
LOG_LOCAL0到LOG_LOCAL7 : 保留
LOG_LPR : line printer次系统
LOG_MAIL : mail次系统
LOG_NEWS : USENET news次系统
LOG_SYSLOG : syslogd内部所产生的讯息
LOG_USER(default) : 一般使用者等级讯息
LOG_UUCP : UUCP次系统
syslog( int priority, char *format, ...)
priority
决定讯息的重要性. 以下的等级重要性逐次递减:
LOG_EMERG : 系统无法使用
LOG_ALERT : 必须要立即采取反应行动
LOG_CRIT : 重要状况发生
LOG_ERR : 错误状况发生
LOG_WARNING : 警告状况发生
LOG_NOTICE : 一般状况,但也是重要状况
LOG_INFO : 资讯讯息
LOG_DEBUG : 除错讯息
format
这之后的参数用法和printf()一样,见下面例子。
例:
.............................
openlog(appname , LOG_NDELAY, LOG_DAEMON);
syslog(LOG_INFO, "connection from: %s\n", inet_ntoa(sa.sin_addr));
closelog();
.............................
日志文件中会记录:
utelnetd: connection from: 192.168.0.115
syslog 很简单。
如果是 2.4.x 的话,
只需要将 syslogd 这个程序及其依赖的 .so 拷贝到目标机上去,
哦,别忘了一并拷贝 /etc/syslog.conf
然后在启动脚本启动一下就行了。
2.6.x 的话,需要连 klogd 一并拷贝过去。
2.6.x 的 klogd + syslogd 相当于 2.4.x 的 syslogd。
我用的2.6内核、busybox的syslogd,在/etc/init.d/rcS里面先klogd,再syslogd -O /var/log/message ,结果syslogd并没有启起来,非要等到进入shell后,手工 syslogd -O /var/log/message 才能起来。
我是用2.6内核,原来要加上KLOGD才能跑起来的