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

监控log文件的需求

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

(有个奇怪需求,就是log 因为重复启动原因,会一直加,不是同一个log)

监控界面

涉及的Python代码,

有需要的拿去吧

  • 时间戳
  • unicode - 没用上(python 3)
  • 文件夹遍历
  • 读取文件夹
  • enumerate() 方法
  • while 循环 +sleep(1)
python 复制代码
# 相关的Renderdoc 关于glsl shader的逆向代码 ,非Python:https://blog.csdn.net/avi9111/article/details/132798279?spm=1001.2014.3001.5502
# Notices:
# 1. the 3rd parameter of open() is to disable file buffering
#      so file updated by another process could be picked up correctly
#      but since your focus is newly added tail, enable buffering is ok too
# 2. It is not necessary to fh.tell() to save the position, and then seek()
#     to resume, as if readline() failed, the pointer stay still at the EOF

import sys
import time
import os
if sys.version_info[0] >= 3:
    unicode = str
'''获取文件的创建时间'''
#模型奇妙 https://www.cnpython.com/qa/153573
def get_FileCreateTime(filePath):
    #filePath = unicode(filePath,encoding='utf8')#Python 3 renamed the unicode type to str,
    t = os.path.getctime(filePath)
    #return TimeStampToTime(t)
    return t
#获取文件内容(info),参考:https://blog.csdn.net/HeatDeath/article/details/79526037
def checkLatestLog(folder):
    files = os.listdir(folder)
    
    name_latest = ''
    t_latest = -1
    for i,n in enumerate(files):#这个 i 没什么用,就是写着玩
        t = get_FileCreateTime(folder+"\\" + n)#这个拼接代码应该在 win 平台,才能用
        if t>t_latest:
            t_latest = t
            name_latest = n
    return folder +"\\" + name_latest#这个代码应该在 win 平台,才能用
        
filename = sys.argv[1]#全路径吧,(要是相对路径。。。本来可以,现在应该会有问题 ,下面套了逻辑)
print("...open..."+filename)
thisFilePath= filename
#就是一个很普通的update 循环,也可以不用 with open() 套外面,不过之前代码就是这个逻辑
with open(filename) as fh:
#with open(filename, 'r', 0) as fh:
#with os.fdopen(filename,'wb',0) as fh:
    while True: 
        line = fh.readline()
        if not line:
            time.sleep(1)
            # 加了一个逻辑==判断当前文件夹是否有最新日志
            logFilePath = checkLatestLog(os.path.dirname(filename))
            if(logFilePath!=thisFilePath):
                fh = open(logFilePath)
                thisFilePath = logFilePath
                print(".............. 换了一个 log .............." + logFilePath)

        else:
            print(line)
相关推荐
Sarvartha1 小时前
final 关键字
java·开发语言
数字融合1 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0111 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
程序员Sunday1 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
zhangzeyuaaa2 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
Marst Code2 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红3 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
谢亮_vipxieliang3 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
思无邪664 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能
H.莓飛4 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法