自动监控模块日志异常情况

在机械里面爬不出来的研发。。。。第一次写完整的代码,第一次写帖子。

背景:最近公司在做物联网项目,就是用物理网模块与现有的电控通讯,采集数据然后通过中继器上传到云平台。由于成本控制,模块也比较极限(合作方说的),容易出现重启,丢包等情况。所以我们这边整机测试的时候,需要长时间运行监控模块的异常情况。

ps:第一次看见日志满屏幕跑的数字,感觉挺新奇。。。有一种错觉,我是不是不用干机械了,哈哈

需求:写个简单的程序,实时监控日志的关键字,出现“初始化”、“发送失败”等异常的字眼,就把这个日志记录下来,并统计整个时间段发生的次数。
日志用的是secureCTR工具,能够自动加时间戳,并保存log格式文件。

总结:
1、整体都是面向百度和CSDN编程,感觉每种需求都有好多中方式实现,都是选择我能理解比较简单好实现的方式;
2、如果关键字有10个,那def key()函数会特别长,求大佬推荐个更好用的方式;
3、如果我想同时监控处理多个log只能进行多开程序,目前想到就是这个代码再复制贴一遍,还没想好怎么实现;
3、一个比较严重的BUG,就是最后一个while Ture循环,封装到应用程序之后,不能通过按键或者指令中途暂停,想要停止运行,只能关闭程序。找了一下,没学会。求大佬推荐点通俗的链接,能解决这个问题;
4、设备24小时一直运行,人也不怎么看着。本来想如果出现异常,主动通过微信发一个消息提醒一下。但是现在好像网页版微信一直登陆不上去。有没有其他什么方式。或者大佬们都怎么实现的,消息提醒的。

如下是代码实现:
1、定义初始值

import datetime
import time
import re
a = 0  # 失败次数
b = 0  # 重启次数
count1 = 0 # 当前行数初始值`

2、打开日志log文件,读取日志内容

def file_open(file_paths):    #   函数打开文档,读取行数
    global log       # 全局变量   行数
    global count   # 全局变量 当前行数
    with open(file_paths, mode='r',encoding='utf-8') as f:      # 打开指定位置的文档
        log = f.readlines() # 按行读取
        count = len(log)  # 读取总行数
        print(count)

3、逐行匹配关键字,如果匹配上则保存当前行日志到“error-file”中

def key(): # 按行匹配,匹配到“发送失败”,就匹配该行的文字
    global count1, a, b
    global key1,key2
    for lens in range(count1,count):   # 上一次结束的行数开始,到总行数
        lines1=log[count1]
        Key1 = re.findall(key1, lines1, re.M)
        Key2 = re.findall(key2, lines1, re.M)
        if Key1:   #  先匹配Key1 关键字
            a=a+1
            print("第",a,key1)  # 按行匹配,匹配到“Key1”,记录第几次
            with open(error_file_path, mode='a', encoding='utf-8') as error_file:
                error_file.write(log[count1])  # 记录到错误日志文件中
        elif Key2:   #  再匹配Key2 关键字
            b=b+1
            print("第",b,key2)  # 按行匹配,匹配到“Key2”
            with open(error_file_path, mode='a', encoding='utf-8') as error_file:
                error_file.write(log[count1])   # 记录到错误日志文件中
        # elif Key3:  # 可以根据需要添加更多的关键字匹配
        else :
            pass
        count1 = count1+1  # 下次开始的行数

4、运行之前,配置log格式日志的文件路径,并定义error_file的保存路径。(如果就自己用,可以直接写死,不用每次配置。这里想给其他人电脑用,所以加了这个)

# 输入文件路径和文件名
file_path = input(print("输入文件路径(包含文件名):"))
file_name = input(print("请输入日志文件名:"))
file_paths = file_path + '\\'+ file_name    # 日志路径生成
error_file_name = "error_file.log"     # 错误日志文件名
error_file_path = file_path + '\\'+ error_file_name    # 错误日志路径

5、主程序,先配置需要监控的关键字,这里只定义了两个。

# 输入需要监控关键字
key1 = input(print("输入监控关键字1:"))
key2 = input(print("输入监控关键字2:"))
while True:   # 让他一直循环
    file_open(file_paths)  # 打开文档,日志保存路径
    key()
    print("总计",key1,a,"次;","   总计",key2,b,"次;")
    time.sleep(10)  # 间隔10秒刷新检测一次
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值