• 分享一个Python 写的监控日志log txt文档 的代码


    监控log文件的需求

    某些特殊原因,想一直看到.log 的最后一行打印,所以写了一些代码监控log

    (有个扩展需求,就是log 因为重复启动原因,会一直创建新文件,监控的对象可能在运行时一直变,不是初始指向的log)

    监控界面

    调用方法

    python traceLog.py C:\XXXXX\RenderDoc_2023.09.16_13.27.14.log

    涉及的Python代码,

    有需要的拿去吧

    • 时间戳
    • unicode - 没用上(python 3)
    • 文件夹遍历
    • 读取文件
    • enumerate() 方法
    • while 循环 +sleep(1)
    1. # traceLog.py
    2. # 相关的Renderdoc 关于glsl shader的逆向代码 ,非Python:https://blog.csdn.net/avi9111/article/details/132798279?spm=1001.2014.3001.5502
    3. # Notices:
    4. # 1. the 3rd parameter of open() is to disable file buffering
    5. # so file updated by another process could be picked up correctly
    6. # but since your focus is newly added tail, enable buffering is ok too
    7. # 2. It is not necessary to fh.tell() to save the position, and then seek()
    8. # to resume, as if readline() failed, the pointer stay still at the EOF
    9. import sys
    10. import time
    11. import os
    12. if sys.version_info[0] >= 3:
    13. unicode = str
    14. '''获取文件的创建时间'''
    15. #模型奇妙 https://www.cnpython.com/qa/153573
    16. def get_FileCreateTime(filePath):
    17. #filePath = unicode(filePath,encoding='utf8')#Python 3 renamed the unicode type to str,
    18. t = os.path.getctime(filePath)
    19. #return TimeStampToTime(t)
    20. return t
    21. #获取文件内容(info),参考:https://blog.csdn.net/HeatDeath/article/details/79526037
    22. def checkLatestLog(folder):
    23. files = os.listdir(folder)
    24. name_latest = ''
    25. t_latest = -1
    26. for i,n in enumerate(files):#这个 i 没什么用,就是写着玩
    27. t = get_FileCreateTime(folder+"\\" + n)#这个拼接代码应该在 win 平台,才能用
    28. if t>t_latest:
    29. t_latest = t
    30. name_latest = n
    31. return folder +"\\" + name_latest#这个代码应该在 win 平台,才能用
    32. filename = sys.argv[1]#全路径吧,(要是相对路径。。。本来可以,现在应该会有问题 ,下面套了逻辑)
    33. print("...open..."+filename)
    34. thisFilePath= filename
    35. #就是一个很普通的update 循环,也可以不用 with open() 套外面,不过之前代码就是这个逻辑
    36. with open(filename) as fh:
    37. #with open(filename, 'r', 0) as fh:
    38. #with os.fdopen(filename,'wb',0) as fh:
    39. while True:
    40. line = fh.readline()
    41. if not line:
    42. time.sleep(1)
    43. # 加了一个逻辑==判断当前文件夹是否有最新日志
    44. logFilePath = checkLatestLog(os.path.dirname(filename))
    45. if(logFilePath!=thisFilePath):
    46. fh = open(logFilePath)
    47. thisFilePath = logFilePath
    48. print(".............. 换了一个 log .............." + logFilePath)
    49. else:
    50. print(line)

  • 相关阅读:
    Python中*args 和**kwargs的用法
    Spring——@Transactional事务注解原理及失效场景
    为什么字节大量用GO而不是Java?
    TypeScript的简单总结
    shell脚本之函数
    基于PHP+MySQL青年志愿者服务管理系统的设计与实现
    MyBatis有哪几种运行SQL的方式呢?
    MySQL高级学习八
    [oeasy]教您玩转python - 0002 - 你好世界(hello world!)
    3个ui自动化测试痛点
  • 原文地址:https://blog.csdn.net/avi9111/article/details/132921785