CN113672572A - 一种嵌入式linux系统syslog的日志存储方法 - Google Patents
一种嵌入式linux系统syslog的日志存储方法 Download PDFInfo
- Publication number
- CN113672572A CN113672572A CN202110999274.6A CN202110999274A CN113672572A CN 113672572 A CN113672572 A CN 113672572A CN 202110999274 A CN202110999274 A CN 202110999274A CN 113672572 A CN113672572 A CN 113672572A
- Authority
- CN
- China
- Prior art keywords
- log
- log information
- ptail
- shared memory
- syslog
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 238000010200 validation analysis Methods 0.000 claims description 4
- 230000001360 synchronised effect Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/172—Caching, prefetching or hoarding of files
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/1805—Append-only file systems, e.g. using logs or journals to store data
- G06F16/1815—Journaling file systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种嵌入式linux系统syslog的日志存储方法,其步骤是:日志守护进程启动;共享内存初始化;从flash的文件中读取日志到共享内存环形缓冲区;日志守护进程接收日志;对于日志信息进行统一格式处理;把格式化后的日志信息写入共享内存环形缓冲区;环形缓冲区同步保存,申请环形缓冲区大小的内存,从共享内存环形缓冲区中把日志信息拷贝到分配的内存中,然后用fputs写入flash中的文件,然后再释放分配的内存空间。本发明可以保存flash也就是重启后可以查看之前的日志信息,并支持循环缓存,可以一直查看到最近固定大小的日志信息;可以更好的维护日志信息,保证日志的完整性,断电后不会丢失日志信息。
Description
技术领域
本发明涉及系统日志存储领域,具体是一种嵌入式linux系统syslog的日志存储方法。
背景技术
操作系统运行过程当中会产生许多信息,这些信息既是观察系统运行过程当中正常的一种途径(手段、凭借),同时它也提供了当发生故障时定位问题所在的必要信息。在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。
完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或Level)、时间、主机名或IP、进程名、进程ID和正文。在Unix类操作系统上,能够按Facility和Severity的组合来决定什么样的日志消息是否需要记录,记录到什么地方,是否需要发送到一个接收syslog的服务器等。由于syslog简单而灵活的特性,syslog不再仅限于Unix类主机的日志记录,任何需要记录和发送日志的场景,都可能会使用syslog。
在家庭网关应用中,有时候会出现一些故障,需要电信运行商排查故障,这个时候电信运营商很多情况下需要查看家庭用户的网关的日志信息来排查,需要最近的上千条日志信息,那么日志的完整性和存储尤为重要了。
现有嵌入式linux的busybox syslog提供了几种存取日志的方法。
其中一种就是共享内存;这种方式的好处是可以实现日志循环缓存,缺点是不保存flash,断电日志信息会丢失。
还有一种是保存文件;路径为/var/log/messages,但保存文件的方式不能一个文件无限制保存下去,所以会给文件固定大小,一旦存满便会保存为messages.0,messages.1,....这样不方便管理,也不方便电信运营商排查故障时查看最近产生上千条日志信息。
这两种方法各有利弊,因此需要找到一种方法可以保证日志的完整性,断电不会丢失和查看最近产生的若干条日志信息。
发明内容
本发明的目的在于提供一种嵌入式linux系统syslog的日志存储方法,可以同时支持循环缓存并且可以保存flash,更好的维护日志信息,并且保证日志的完整性,
以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种嵌入式linux系统syslog的日志存储方法,其步骤如下:
1.日志守护进程启动;
嵌入式linux系统初始化的时候启动syslogd进程,同时在内存中分配固定大小的共享内存。
2.共享内存初始化。
3.从flash的文件中读取日志到共享内存环形缓冲区;
从flash中保存的日志文件中读取重启前保存的日志信息,写到共享内存环形缓冲区。
共享内存有环形缓存算法,可以实现固定总大小的日志信息循环。
循环缓冲区(也称为环形缓冲区)是固定大小(shm_size)的缓冲区,工作原理就像内存是连续的且可循环的一样;环形缓冲区是用队列头部指针pHead和队列尾部指针pTail来控制,先进先出原则,当缓冲区被使用完,且又有新的数据需要存储时,覆盖历史最久的数据,保存最新数据。
4.日志守护进程接收日志;
对于接收日志的优先级和日志进程的级别进行比较,等于和高于日志进程的级别则接收并进行下一步处理。
5.日志信息格式化;
对于日志信息进行统一格式处理:
[Timestamp][PRI]messages....;
其中,Timestamp为时间戳,PRI为优先级,messages为日志内容。
6.把格式化后的日志信息写入共享内存环形缓冲区;
当syslogd获取到日志信息的时候,会通过log_to_shmem()将buf传入共享内存,用于其他的进程读取。
当添加数据时,head指针前进;当使用数据时,tail指针向前移动;当到达缓冲区的尾部时,指针又回到缓冲区的起始位置;如果缓存存满,新产生一条日志时,缓存区的历史最久的日志被新的日志信息覆盖。
7.环形缓冲区同步保存,申请环形缓冲区大小的内存,从共享内存环形缓冲区中把日志信息拷贝到分配的内存中,然后用fputs写入flash中的文件,然后再释放分配的内存空间。
作为本发明的进一步方案:如果是nandflash,Flash都有擦写次数的上限,所以应减少保存的次数,考虑到这个问题也有其解决办法,在产生日志信息的时候,系统日志守护进程接受到日志信息,对于日志的严重程度和优先级做一些检查,如果是优先级比较低的日志可以先先放入缓存但不保存flash,等日志信息缓存若干条或者有优先级比较高或者严重的日志产生的时候一起保存flash,以减少保存flash的次数。
与现有技术相比,本发明的优点是:可以保存flash也就是重启后可以查看之前的日志信息,并支持循环缓存,可以一直查看到最近固定大小比如1000条以上的日志信息;可以更好的维护日志信息,保证日志的完整性,断电后不会丢失日志信息;采用本发明的方法能够顺利完成日志处理和保存工作,不会出现仅看到部分日志,断电后日志信息不保存,或出现重要日志信息丢失的情况。
附图说明
图1为本发明方法中环形缓冲区的结构示意图。
图2为本发明方法的流程图。
具体实施方式
下面结合具体实施方式对本专利的技术方案作进一步详细地说明。
请参阅图1、2,一种嵌入式linux系统syslog的日志存储方法,其步骤如下:
1.日志守护进程启动;
嵌入式linux系统初始化的时候启动syslogd进程,同时在内存中分配固定大小的共享内存。
2.共享内存初始化。
3.从flash的文件中读取日志到共享内存环形缓冲区;
从flash中保存的日志文件中读取重启前保存的日志信息,写到共享内存环形缓冲区。
共享内存有环形缓存算法,可以实现固定总大小的日志信息循环。
循环缓冲区(也称为环形缓冲区)是固定大小(shm_size)的缓冲区,工作原理就像内存是连续的且可循环的一样;环形缓冲区是用队列头部指针pHead和队列尾部指针pTail来控制,先进先出原则,当缓冲区被使用完,且又有新的数据需要存储时,覆盖历史最久的数据,保存最新数据。
4.日志守护进程接收日志;
对于接收日志的优先级和日志进程的级别进行比较,等于和高于日志进程的级别则接收并进行下一步处理。
5.日志信息格式化;
对于日志信息进行统一格式处理:
[Timestamp][PRI]messages....;
其中,Timestamp为时间戳,PRI为优先级,messages为日志内容。
6.把格式化后的日志信息写入共享内存环形缓冲区;
当syslogd获取到日志信息的时候,会通过log_to_shmem()将buf传入共享内存,用于其他的进程读取。
当添加数据时,head指针前进;当使用数据时,tail指针向前移动;当到达缓冲区的尾部时,指针又回到缓冲区的起始位置;如果缓存存满,新产生一条日志时,缓存区的历史最久的日志被新的日志信息覆盖。
7.环形缓冲区同步保存,申请环形缓冲区大小的内存,从共享内存环形缓冲区中把日志信息拷贝到分配的内存中,然后用fputs写入flash中的文件,然后再释放分配的内存空间。
进一步的:如果是nandflash,Flash都有擦写次数的上限,所以应减少保存的次数,考虑到这个问题也有其解决办法,在产生日志信息的时候,系统日志守护进程接受到日志信息,对于日志的严重程度和优先级做一些检查,如果是优先级比较低的日志可以先先放入缓存但不保存flash,等日志信息缓存若干条或者有优先级比较高或者严重的日志产生的时候一起保存flash,以减少保存flash的次数。
本发明引入进程管理模块,管理所有的进程,分发所有的消息,及业务配置消息;采用单独的配置模块进行多配置信息配置并通知;采用独立的业务生效模块执行业务生效。采用熟悉的XML作为配置存储方式,并且XML在内存分布有良好的结构,高效且避免出错。
环形缓冲区同步保存机制算法说明如下:
1.pHead和pTail分别是环形缓冲区的首地址和尾地址,shm_size是环形缓冲区的分配总大小,p->data是共享内存的指针地址。
2.当有新的长度为addLen日志msg需要存储时;
(1)如果pTail+addLen<shm_size时;
1)如果pTail>pHead,缓冲区还没有存满增加addLen到共享内存队尾,同时pTail+=addLen;
2)如果pTail<pHead,并且pTail+len>=pHead,需要移动pHead指向下一条日志,同时pTail+=addLen;
(2)如果pTail+addLen>shm_size时,说明共享内存缓冲区已经存满,重新计算出pHead和pTail的地址;
1)k_buf=pTail+addLen-shm_size;
2)从p->data+k_buf偏移中查找第一次出现换行符的位置c;
找到后pHead=c-p->data+1,把msg写入到p->data+pTail;pTail=k_buf+1;
没有找到则pHead=pTail=0。
3分配shm_size大小的内存空间pLogBuf,从共享内存写到pLogBuf中。
4.从pLogBuf写入flash的文件中。
上面对本专利的较佳实施方式作了详细说明,但是本专利并不限于上述实施方式,在本领域的普通技术人员所具备的知识范围内,还可以在不脱离本专利宗旨的前提下作出各种变化。
Claims (7)
1.一种嵌入式linux系统syslog的日志存储方法,其特征在于,其步骤如下:
(1)日志守护进程启动;嵌入式linux系统初始化的时候启动syslogd进程,同时在内存中分配固定大小的共享内存;
(2)共享内存初始化;
(3)从flash的文件中读取日志到共享内存环形缓冲区;
从flash中保存的日志文件中读取重启前保存的日志信息,写到共享内存环形缓冲区;
共享内存有环形缓存算法,能够实现固定总大小的日志信息循环;
(4)日志守护进程接收日志;
对于接收日志的优先级和日志进程的级别进行比较,等于和高于日志进程的级别则接收并进行下一步处理;
(5)日志信息格式化;对于日志信息进行统一格式处理;
(6)把格式化后的日志信息写入共享内存环形缓冲区;
当syslogd获取到日志信息的时候,会通过log_to_shmem()将buf传入共享内存,用于其他的进程读取;
当添加数据时,head指针前进;当使用数据时,tail指针向前移动;当到达缓冲区的尾部时,指针又回到缓冲区的起始位置;如果缓存存满,新产生一条日志时,缓存区的历史最久的日志被新的日志信息覆盖;
(7)环形缓冲区同步保存,申请环形缓冲区大小的内存,从共享内存环形缓冲区中把日志信息拷贝到分配的内存中,然后用fputs写入flash中的文件,然后再释放分配的内存空间。
2.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,如果是nandflash,Flash都有擦写次数的上限,应减少保存的次数,在产生日志信息的时候,系统日志守护进程接受到日志信息,对于日志的严重程度和优先级做一些检查,如果是优先级比较低的日志可以先先放入缓存但不保存flash,等日志信息缓存若干条或者有优先级比较高或者严重的日志产生的时候一起保存flash,以减少保存flash的次数。
3.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,日志信息按照如下格式统一处理:[Timestamp][PRI]messages....;其中,Timestamp为时间戳、PRI为优先级、messages为日志内容。
4.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,引入进程管理模块,管理所有的进程,分发所有的消息,及业务配置消息;采用单独的配置模块进行多配置信息配置并通知;采用独立的业务生效模块执行业务生效。
5.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,采用熟悉的XML作为配置存储方式,并且XML在内存分布有良好的结构,高效且避免出错。
6.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,循环缓冲区也称为环形缓冲区,是固定大小的缓冲区,工作原理就像内存是连续的且可循环的一样;环形缓冲区是用队列头部指针pHead和队列尾部指针pTail来控制,先进先出原则,当缓冲区被使用完,且又有新的数据需要存储时,覆盖历史最久的数据,保存最新数据。
7.根据权利要求1所述的一种嵌入式linux系统syslog的日志存储方法,其特征在于,环形缓冲区同步保存机制算法说明如下:
(1)pHead和pTail分别是环形缓冲区的首地址和尾地址,shm_size是环形缓冲区的分配总大小,p->data是共享内存的指针地址;
(2)当有新的长度为addLen日志msg需要存储时;
1)如果pTail+addLen<shm_size时;
a.如果pTail>pHead,缓冲区还没有存满增加addLen到共享内存队尾,同时pTail+=addLen;
b.如果pTail<pHead,并且pTail+len>=pHead,需要移动pHead指向下一条日志,同时pTail+=addLen;
2)如果pTail+addLen>shm_size时,说明共享内存缓冲区已经存满,重新计算出pHead和pTail的地址;
a.k_buf=pTail+addLen-shm_size;
b.从p->data+k_buf偏移中查找第一次出现换行符的位置c;
找到后pHead=c-p->data+1,把msg写入到p->data+pTail;pTail=k_buf+1;
没有找到则pHead=pTail=0;
(3)分配shm_size大小的内存空间pLogBuf,从共享内存写到pLogBuf中;
(4)从pLogBuf写入flash的文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110999274.6A CN113672572B (zh) | 2021-08-28 | 2021-08-28 | 一种嵌入式linux系统syslog的日志存储方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110999274.6A CN113672572B (zh) | 2021-08-28 | 2021-08-28 | 一种嵌入式linux系统syslog的日志存储方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113672572A true CN113672572A (zh) | 2021-11-19 |
CN113672572B CN113672572B (zh) | 2024-02-09 |
Family
ID=78547163
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110999274.6A Active CN113672572B (zh) | 2021-08-28 | 2021-08-28 | 一种嵌入式linux系统syslog的日志存储方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113672572B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115203002A (zh) * | 2022-09-16 | 2022-10-18 | 深圳华云信息系统有限公司 | 日志处理方法、装置、电子设备及存储介质 |
CN115269392A (zh) * | 2022-07-20 | 2022-11-01 | 北京斯年智驾科技有限公司 | 一种用于融合感知的可视化调试方法、设备、介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567248A (zh) * | 2003-07-01 | 2005-01-19 | 华为技术有限公司 | 应用程序日志记录方法及系统 |
CN103092719A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 一种文件系统的断电保护方法 |
CN104537074A (zh) * | 2014-12-31 | 2015-04-22 | 天津南大通用数据技术股份有限公司 | 一种提高数据库系统写日志性能的方法 |
CN106021348A (zh) * | 2016-05-09 | 2016-10-12 | 深圳市百米生活股份有限公司 | 一种日志文件滚动存储系统 |
CN106648931A (zh) * | 2016-12-12 | 2017-05-10 | 贵阳朗玛信息技术股份有限公司 | 一种日志信息记录的方法及装置 |
CN109508246A (zh) * | 2018-06-25 | 2019-03-22 | 广州多益网络股份有限公司 | 日志记录方法、系统和计算机可读存储介质 |
CN110968478A (zh) * | 2019-11-21 | 2020-04-07 | 掌阅科技股份有限公司 | 日志采集方法、服务器及计算机存储介质 |
-
2021
- 2021-08-28 CN CN202110999274.6A patent/CN113672572B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1567248A (zh) * | 2003-07-01 | 2005-01-19 | 华为技术有限公司 | 应用程序日志记录方法及系统 |
CN103092719A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 一种文件系统的断电保护方法 |
CN104537074A (zh) * | 2014-12-31 | 2015-04-22 | 天津南大通用数据技术股份有限公司 | 一种提高数据库系统写日志性能的方法 |
CN106021348A (zh) * | 2016-05-09 | 2016-10-12 | 深圳市百米生活股份有限公司 | 一种日志文件滚动存储系统 |
CN106648931A (zh) * | 2016-12-12 | 2017-05-10 | 贵阳朗玛信息技术股份有限公司 | 一种日志信息记录的方法及装置 |
CN109508246A (zh) * | 2018-06-25 | 2019-03-22 | 广州多益网络股份有限公司 | 日志记录方法、系统和计算机可读存储介质 |
CN110968478A (zh) * | 2019-11-21 | 2020-04-07 | 掌阅科技股份有限公司 | 日志采集方法、服务器及计算机存储介质 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115269392A (zh) * | 2022-07-20 | 2022-11-01 | 北京斯年智驾科技有限公司 | 一种用于融合感知的可视化调试方法、设备、介质 |
CN115269392B (zh) * | 2022-07-20 | 2023-11-14 | 北京斯年智驾科技有限公司 | 一种用于融合感知的可视化调试方法、设备、介质 |
CN115203002A (zh) * | 2022-09-16 | 2022-10-18 | 深圳华云信息系统有限公司 | 日志处理方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113672572B (zh) | 2024-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110442560B (zh) | 一种日志重演方法、装置、服务器和存储介质 | |
CN108170768B (zh) | 数据库同步方法、装置及可读介质 | |
US8347050B2 (en) | Append-based shared persistent storage | |
US6658596B1 (en) | Automated queue recovery using element- based journaling | |
US10795826B2 (en) | Translation lookaside buffer management method and multi-core processor | |
CN113672572A (zh) | 一种嵌入式linux系统syslog的日志存储方法 | |
CN102411598B (zh) | 一种实现数据一致性的方法及其系统 | |
EP3816783B1 (en) | Method and device for data migration | |
CN108989432B (zh) | 用户态的文件发送方法、文件接收方法和文件收发装置 | |
US11556400B2 (en) | Handling large messages via pointer and log | |
CN108829342B (zh) | 一种日志存储方法、系统及存储装置 | |
US8275951B2 (en) | Local bitmaps for an array of redundant storage devices | |
US8010834B2 (en) | Failure information monitoring apparatus and failure information monitoring method | |
US20080294705A1 (en) | Performance Improvement with Mapped Files | |
US20220334733A1 (en) | Data restoration method and related device | |
US7644318B2 (en) | Method and system for a failover procedure with a storage system | |
CN109697112B (zh) | 分布式集约化一站式作业系统和实现方法 | |
US20210318826A1 (en) | Data Storage Method and Apparatus in Distributed Storage System, and Computer Program Product | |
EP4036732A1 (en) | Verification data calculation method and device | |
US7010650B2 (en) | Multiple data management method, computer and storage device therefor | |
US20070208784A1 (en) | Parsing computer system logging information collected by common logging | |
CN112612677A (zh) | 日志存储方法、装置、电子设备及可读存储介质 | |
CN111694806A (zh) | 一种事务日志的缓存方法、装置、设备和存储介质 | |
CN109189326B (zh) | 分布式集群的管理方法和装置 | |
CN114490540B (zh) | 数据存储方法、介质、装置和计算设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |