Board logo

标题: 定制嵌入式系统中 Apache 的日志回滚工具(2) [打印本页]

作者: look_w    时间: 2018-5-23 18:30     标题: 定制嵌入式系统中 Apache 的日志回滚工具(2)

如何定制日志回滚工具由于以上的工具并不适合嵌入式系统,下面将详细的讲解和实现一个满足日志回滚工具的原理并实现一个满足嵌入式系统的日志工具。该工具提供了与其他的日志工具相似的接口,可以设定的日志文件的大小,同时设定旧日志的保留数目。
系统准备:第一,由 Apache 管道模式的原理可知,我们需要使用管道操作符“|”来启动 Apache 服务器的管道机制。因此为了确保能正确运行,需要确保当前的系统下面是否有 shell 脚本执行器存在。通常在嵌入式系统中一般都是使用最小的 linux 系统,使用 busybox 命令工具来提供最常用的系统命令。为了与 PC 上的 linux 系统具有相似性,建议在 /bin 文件夹下创建一个 sh 的链接文件。
第二,许多的嵌入式系统的文件系统都是使用只读文件系统,因此为了确保能成功创建日志文件,请确保你要保存日志的文件系统是可写的。
原理与实现:由于 Apache 服务器会把日志信息输出到屏幕,通过管道变成标准输入。因此,日志回滚首先需要读取屏幕获取输出的日志信息,其中0表示标准输入的文件描述符。
1
n_log = read(0, log_buf, sizeof(log_buf));




其次,在把读到的日志信息写入文件前,需要判断当前是否已存在日志文件可供写入。如果存在,并且该日志的大小还未达到指定的文件大小,就写入该文件。否则,新建一个日志文件。
1
2
3
4
5
6
7
8
9
10
11
12
if(log_fd >= 0)
{
    if( filesize(log_fd) >= f_size)
{
    fclose(log_fd);
    log_fd = -1;
}
}
if(log_fd == -1)
{
    log_fd = create_new_log();
}




最后,当一切都准备就绪以后,我们可以放心地将该条信息写入日志文件中。
1
2
write(log_fd, log_buf, n_log);
n_log = read(0, log_buf, sizeof(log_buf));




这样就完成了一次日志信息的登记,完成以后又重新开始下一次日志操作。其实现的简单的流程如下:
图2 回滚日志工具流程图
图 2. 回滚日志工具流程图以上介绍了一个适合于的嵌入式系统的常用日志回滚工具。由于嵌入式系统差异性很大或需求不同,用户可以根据实际应用定制有针对性的日志工具。
结束语本文详细的描述了 Apache 服务器的管道日志机制的原理,并比较了当前流行的日志回滚工具。在此基础上,介绍了日志回滚工具的工作原理和流程,并定制了一个针对嵌入式系统的日志回滚工具。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0