System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于软PLC运行时的异步日志实现方法、设备及介质技术_技高网

一种基于软PLC运行时的异步日志实现方法、设备及介质技术

技术编号:40802173 阅读:4 留言:0更新日期:2024-03-28 19:27
本发明专利技术涉及数据处理技术领域,且公开了一种基于软PLC运行时的异步日志实现方法,包括:S1、在软PLC运行时的主线程中初始化日志数据:S2、在软PLC运行时的任意组件接口中添加不同级别的日志记录;S3、运行后台消费者线程,将日志数据以文件形式持久化到磁盘;S4、执行不同级别的日志记录接口。本发明专利技术基于多生产和单消费的模型,结合大数组缓冲区和双循环链表的设计方式,使得日志缓冲区相比于队列有更强大的拓展能力,且避免了大量内存分配释放引起的程序性能下降问题,并提高了异步日志在频繁写日志时的性能表现;本发明专利技术的异步日志处理方法一定程度上满足了软PLC运行时的高可靠、高性能的要求。

【技术实现步骤摘要】

本专利技术涉及数据处理领域,尤其涉及一种基于软plc运行时的异步日志实现方法、设备及介质。


技术介绍

1、软plc(programmable logic controller,可编程逻辑控制器)运行时包含一套日志记录系统,日志记录是软plc系统开发、维护的重要组成部分。日志记录既可以输出到控制台,如终端、软plc编程系统的日志窗口,也可以输出到文件,将日志数据持久化到存储介质中,一方面能够用于追踪程序运行状态,另一方面用于定位分析问题。确切的说,开发者在软plc运行时组件中的任意需要记录日志的地方添加不同级别的日志数据,然后根据日志信息,了解运行时中的组件在特定时间点的行为,以此分析软plc运行时的性能瓶颈及故障问题。

2、而现有基于软plc运行时的日志记录实现方法,主要包括同步日志记录和异步日志记录。其中,常规的同步日志记录存在以下缺陷:每次调用一次打印日志接口就对应一次系统调用写日志,在日志产生不频繁的场景下没什么问题,但是,在频繁写日志时,大量的日志打印陷入等量的系统调用,导致较大的系统开销,且使得打印日志的进程附带了大量同步的磁盘io,对系统的性能产生较大影响;常规的异步日志记录相对同步日志记录的性能会更好,一般会借助队列的方式实现,主线程写日志到队列,队列本身使用条件变量、或者管道等通知机制,当有数据入队列就通知消费者线程去消费日志,但这种方式存在一定的缺陷,生产者线程产生n个日志,对应后台线程会被通知n次,频繁日志写入会造成一定的性能开销,而且不同队列实现方式也各有缺点,如用数组实现,会出现空间不足,队列内存不易拓展;用链表实现,每条消息的生产消费都对应内存的创建销毁,有一定的开销。

3、为解决上述问题,本申请中提出一种基于软plc运行时的异步日志实现方法、设备及介质。


技术实现思路

1、(一)专利技术目的

2、为解决
技术介绍
中存在的技术问题,本专利技术提出一种基于软plc运行时的异步日志实现方法、设备及介质,本专利技术基于多生产和单消费的模型,结合大数组缓冲区和双循环链表的设计方式,使得日志缓冲区相比于队列有更强大的拓展能力,且避免了大量内存分配释放引起的程序性能下降问题,并提高了异步日志在频繁写日志时的性能表现;本专利技术的异步日志处理方法一定程度上满足了软plc运行时的高可靠、高性能的要求。

3、(二)技术方案

4、为解决上述问题,本专利技术提供了一种基于软plc运行时的异步日志实现方法,包括:

5、s1、在软plc运行时的主线程中初始化日志数据:

6、s2、在软plc运行时的任意组件接口中添加不同级别的日志记录;

7、s3、运行后台消费者线程,将日志数据以文件形式持久化到磁盘;

8、s4、执行不同级别的日志记录接口。

9、优选的,在s1中:

10、通过单例的静态函数,执行构造函数,初始化创建若干个大数组日志缓冲区,多个大数组缓冲区以双向循环链表的方式连接,并使用生产者对象指针和消费者对象指针指向链表的两个节点,分别用于生产数据和消费数据;

11、起始时刻,每个日志缓冲区状态均为空,此时生产者对象指针和消费者对象指针都指向同一个日志缓冲区;

12、由静态函数返回的实例化对象指针,调用初始化路径接口,在指定的绝对路径下创建日志目录,并更新日志文件名、日志级别等数据,供后续消费者线程实现日志数据持久化使用;

13、创建日志消费者后台线程,用于日志数据的持久化操作。

14、优选的,在s2中,所述异步日志的日志生产者实现的步骤,包括:

15、s2.1、执行追加日志函数try_append(),格式化字符串参数,临时缓存待持久化的日志数据,对互斥量加锁;

16、s2.2、检查当前生产者对象指针所指的日志缓冲区的状态;

17、s2.3、若生产者对象指针所指的日志缓冲区的状态为空,且缓冲区空间足够,则往日志缓冲区追加日志,对互斥量解锁;

18、s2.4、若s2.3中,当前缓冲区的状态为满,则直接丢弃临时缓存的日志数据,然后对互斥量解锁;

19、s2.5、结合s2.4,当前缓冲区的状态还是空,但缓冲区空间不足,则直接将当前缓冲区的状态设置为满,然后生产者对象指针移动到下一个日志缓冲区;

20、s2.6、结合s2.5,指针所指的下一个日志缓冲区的状态为空,则生产者对象指针指向该日志缓冲区,再往该日志缓冲区追加临时缓存的日志数据,然后对互斥量解锁;

21、s2.7、若s2.6中,指针所指的下一个日志缓冲区的状态不为空时,申请新内存,此时超过限制内存的总大小,则直接丢弃临时缓存的日志数据;

22、s2.8、结合s2.7,申请新内存后,未超过限制内存的总大小,则申请新的日志缓冲区,往日志缓冲区追加日志,然后对互斥量解锁。

23、优选的,其中,在步骤2.5中,将当前日志缓冲区的状态设置为满后,则触发通知标志,通过条件变量发通知信号,唤醒后台消费者线程持久化临时缓存的日志数据。

24、优选的,仅有一个后台消费者线程,持有消费者对象指针将当前所指的日志缓冲区的日志数据持久化到磁盘;

25、s3中,所述异步日志的日志消费者实现的步骤,包括:

26、s3.1、对互斥量加锁;

27、s3.2、检查当前消费者对象指针所指的日志缓冲区的状态;

28、s3.3、若消费者对象指针所指的日志缓冲区的状态为满,则对互斥量解锁,持久化日志缓冲区数据,将日志数据输出到日志文件,对互斥量重新加锁,将日志缓冲区的状态设定为空,并清空数据,消费者对象指针指向下一个缓冲区,再对互斥量解锁;

29、s3.4、若s3.3中,消费者对象指针所指的日志缓冲区的状态为空,则设置条件变量的超时时间,对条件变量进行超时检测;此时对互斥量进行解锁,使得其他任务线程可以正常访问临界数据,在设定时间内等待获取条件变量的通知信号;

30、s3.5、若在设定时间内获取到了条件变量的通知信号,则对互斥量加锁,再次检查当前消费者对象指针所指的日志缓冲区的状态,此时所指的日志缓冲区的状态为满,同理s3.3;

31、s3.6、若在设定时间内未获取到条件变量的通知信号,则等待条件变量通知信号的函数超时返回,此时检查消费者对象指针所指的日志缓冲区的数据为空,则解锁互斥量,返回到s3.1;

32、s3.7、结合s3.6,若检查消费者对象指针所指的日志缓冲区的数据不为空,此时生产者对象指针与消费者对象指针相等,将生产者对象指针所指的日志缓冲区状态更新为满,且将该对象指针指向下一个日志缓冲区,然后对互斥量解锁,持久化日志缓冲区数据,将日志数据输出到日志文件;持久化完成后,对互斥量重新加锁,重置日志缓冲区,将其状态设定为空,并清空数据,消费者对象指针指向下一个缓冲区,再对互斥量解锁;

33、执行完上述步骤,消费者线程本文档来自技高网...

【技术保护点】

1.一种基于软PLC运行时的异步日志实现方法,其特征在于,包括:

2.根据权利要求1所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,在S1中:

3.根据权利要求2所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,在S2中,所述异步日志的日志生产者实现的步骤,包括:

4.根据权利要求3所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,其中,在S2.5中,将当前日志缓冲区的状态设置为满后,则触发通知标志,通过条件变量发通知信号,唤醒后台消费者线程持久化临时缓存的日志数据。

5.根据权利要求4所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,仅有一个后台消费者线程,持有消费者对象指针将当前所指的日志缓冲区的日志数据持久化到磁盘;

6.根据权利要求5所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,S4中,基于日志级别的使用需求,可以直接调用不同日志级别对应的日志记录宏接口;

7.根据权利要求6所述的一种基于软PLC运行时的异步日志实现方法、设备及介质,其特征在于,在S2中,日志生产者为多线程,通过共同持有生产者对象指针来生产数据,具体在软PLC运行时组件中的任意需要记录日志的地方添加不同级别的日志数据。

8.一种基于软PLC运行时的异步日志实现方法的设备,其特征在于,异步日志实现方法的设备包括:

9.一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现现权利要求1-7任一项所述的方法。

...

【技术特征摘要】

1.一种基于软plc运行时的异步日志实现方法,其特征在于,包括:

2.根据权利要求1所述的一种基于软plc运行时的异步日志实现方法、设备及介质,其特征在于,在s1中:

3.根据权利要求2所述的一种基于软plc运行时的异步日志实现方法、设备及介质,其特征在于,在s2中,所述异步日志的日志生产者实现的步骤,包括:

4.根据权利要求3所述的一种基于软plc运行时的异步日志实现方法、设备及介质,其特征在于,其中,在s2.5中,将当前日志缓冲区的状态设置为满后,则触发通知标志,通过条件变量发通知信号,唤醒后台消费者线程持久化临时缓存的日志数据。

5.根据权利要求4所述的一种基于软plc运行时的异步日志实现方法、设备及介质,其特征在于,仅有一个后台消费者线程,持有消费者对象指针将...

【专利技术属性】
技术研发人员:周万里王明昕许志明陈曦潘文联杨世杰
申请(专利权)人:傲拓科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1