LabVIEW怎么实现监控的⽇志系统
在linux中有内建基于⽇志系统标准协议的⽇志记录系统,详情参考笔者的⽂章-Linux⽇志系统架构和⽂件 。python编程中, Python标准库中的logging模块提供了⽇志相关的功能,详情参考-Python使⽤logging模块完成⽇志记录 。上⾯的两个⽇志记录的⽅法都可以完成⽇志记录与⽇志轮转。在测控领域的LabVIEW平台,笔者以前都是⽤数据库来保存告警信息,但是对于⼤量的运⾏信息保存在数据库就不合适,笔者在思考LabVIEW怎么实现监控的⽇志系统呢?
于是乎,在NI的技术⽀持⽹页上⾯到了⼀个函数,⼀个平时没有注意到的函数。
当使⽤打开/创建/替换⽂件函数(Open/Create/Replace File)来打开⽂件。当我多次写⼊⽂件时,存储在⽂件中的数据在每次写⼊时都会被新数据覆盖。如何在每次写⼊⽂件时将新数据附加到⽂件末尾?在实际的应⽤场景中,即完成⽇志信息写⼊⽂件中。
使⽤编程»⽂件I / O»⾼级⽂件函数下的函数选板上的“设置⽂件位置” 函数(Set File Position),并此VI的from(0:start)枚举输⼊设置为end ,设置⽂件位置函数中的引⽤句柄连接到写⼊⽂件的VI的⽂件输⼊,这会将新数据附加到⽂件末尾。
⾏尾常量(End of Line Constant)(在⽰例中参见)在这种情况下连接到字符串输⼊,以便为写⼊⽂件的
每个值创建⼀个新⾏。如果在“写⼊⽂本⽂件”函数中输⼊数组类型,则不需要此常量,因为它会⾃动将其添加到值末尾。
⽇志⽂件以年⽉(根据⽇志量⼤⼩,或者可以定位为更⼩周期)来命名,在存在这个⽂件时就写⼊⽇志信息,不存在这个⽂件时说明到了⽉度轮换,写到下⼀个⽉命名的⽇志⽂件中。下⾯的案例时笔者循环六次写⼊到⽂本⽂件中,同时字符串可以替换为字符串数组,这样就不需要⾏结束符。
⽣成⽇志⽂件后,对于过期的⽂件怎么删除呢?这⾥就使⽤(windows平台)批处理来完成这个功能。execl函数 linux
如下,路径需要替换为你⾃⼰的路径,过期时间也可以根据保留周期来修改。最后就是⽤windows的任务计划程序来完成定时调⽤这个批处理来完成过期⽇志删除。
forfiles /p "E:\logrecord" /s /m *.* /d -100 /c "cmd /c del @path"
那么在linux中,就使⽤shell脚本来删除,然后利⽤crontab定时调⽤脚本。
find /home/ubuntu/logrecord/  -mtime +100 -name '*.log' -exec rm -r {} \;
基于这个需求,笔者在VI Package Manager⾥⾯搜索log,到了⼀个附加⼯具包Logger,这个⼯具包可以实现⼀个简单的⽇志实⽤程序,为不同的⽇志记录语句提供了级别:跟踪、调试、信息、警告、错误和致命,这个和python的logging库类似。使⽤这个包可以⽣成csv格式的⽂本⽇志⽂件。
根据这个附加⼯具包Logger,反馈到上⾯的写⼊⽂本⽂件函数实现的⽇志上⾯,笔者思考了两个⽅⾯的问题。
1、使⽤写⼊⽂本⽂件函数是否存在⽂件的资源争抢问题
附加⼯具包Logger写⼊⽇志⽂件是在单独的线程上完成的,以保持实时⽬标的确定性。那么反馈到上⾯“写⼊⽂本⽂件”函数中,在同时写⼊⽇志⽂件时会发⽣什么呢?笔者将上⾯的程序载复制⼀份,修改写⼊⽂件中的字符串为Other,即在⼀个vi中同时执⾏写⼊⽂本⽂件,查看⽂件发现同时操作写⼊时会发⽣问题。那么在使⽤写⼊⽂本⽂件函数来实现监控的⽇志系统时,⼀个进程只能操作⼀个⽇志⽂件,不然可能存在资源争抢,数据有误。
但是,笔者范了⼀个错误,“写⼊⽂本⽂件”函数封装成⼦vi后,程序调⽤这个⼦vi来写⼊⽇志信息到⽂件中,这个⼦vi是⾮重⼊执⾏,意味着调⽤⼦vi会按照顺序来执⾏,不会存在资源争抢的问题!
2、使⽤CSV⽂件来保存⽇志增强可读性
.csv是⼀种特殊的纯⽂本的⽂件格式(Comma Separated Values逗号分隔值),字符之间已英⽂字符的逗号或制表符(Tab)分隔,在
windows系统环境上.csv⽂件打开⽅式有多种,如记事本、excel、VS Code等,只要是⽂本编辑器都能正确打开。
那么笔者在字符串中增加逗号分隔,新建⽂件也是.csv。程序框图如下,那么⽣成的⽇志⽂件就可以使⽤excel来打开了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。