Python制作日志监控工具(附源码)

文摘   科技   2024-02-20 19:08   广东  


ISEE小语


“巷子里的猫很自由,却没有归宿;围墙里的狗有归宿,却终身都要低头,人生这道选择题,怎么选都会有遗憾。”

——网友


通过使用PySide6制作日志监控应用工具。

首先,了解一下这个三方库。

PySide6 是一个用于创建图形用户界面 (GUI) 的 Python 库,它是 Qt for Python 的一部分。Qt 是一个跨平台的应用程序和用户界面框架,它允许开发者在 Windows、macOS、Linux、iOS 和 Android 上使用几乎相同的代码库来创建应用程序。PySide6 绑定了 Qt6,这是 Qt 框架的最新主要版本。



环境:

Pycharm

Python 3.9.16



安装:

pip install PySide6==6.6.2



先看实际效果


基本用法

创建一个应用程序实例

# -*- coding: utf-8 -*-import sysfrom PySide6.QtWidgets import QApplication, QMainWindow, QLabel
# 创建一个应用程序实例app = QApplication(sys.argv)
# 创建一个窗口window = QMainWindow()# 设置窗口标题window.setWindowTitle('Log Monitor')# 设置窗口大小和样式window.resize(800, 400)window.setStyleSheet("background-color: black; color: white;")# 创建标签并设置文本label = QLabel('创建一个应用实例', window)# 设置标签位置label.move(350, 100)
# 显示窗口window.show()
# 运行应用程序sys.exit(app.exec())

(左右滑动查看完整代码)

运行,结果:

了解一下简单的使用,那么接下来就开始做日志监控的工具的实例吧


实现原理

使用PySide6库制作[日志监控]小工具,主要实现步骤:

  • 界面设计:设置窗口标题、大小、样式、布局和文本编辑控件等

  • 逻辑处理:通过读取日志文件,输出到监控窗口中。

  • 关键点:

    • 创建定时器用于定期更新日志,本次设置的是每秒更新一次。

    • 考虑性能问题,界面窗口显示最新1000行日志。


项目结构

新创建一个log_monitor项目,具体结构如下:

```结构log_monitor├─log_monitor.py  # 实现逻辑├─logs.log  # 日志文件├─main.py  # 启动程序└─requirements.txt # 项目依赖库```

(左右滑动查看完整代码)


主要代码

实现逻辑log_monitor.py

# -*- coding: utf-8 -*-from PySide6.QtCore import QFile, QIODevice, QTimerfrom PySide6.QtGui import QTextCursorfrom PySide6.QtWidgets import QMainWindow, QTextEdit, QVBoxLayout, QWidget

class LogMonitor(QMainWindow): def __init__(self, log_file_path, parent=None): super().__init__(parent) self.log_file_path = log_file_path
# 设置窗口标题、大小和样式 self.setWindowTitle("Log Monitor") self.resize(800, 400) self.setStyleSheet("background-color: black; color: white;")
# 创建一个布局和文本编辑控件来显示日志 layout = QVBoxLayout() self.log_display = QTextEdit(readOnly=True) layout.addWidget(self.log_display)
# 创建一个中央控件 central_widget = QWidget() central_widget.setLayout(layout) self.setCentralWidget(central_widget)
# 定时器用于定期更新日志 self.timer = QTimer() self.timer.timeout.connect(self.update_log) # 每秒更新一次        self.timer.start(1000)
# 初始化文件位置为0 self.last_pos = 0
def update_log(self): # 创建一个QFile对象 log_file = QFile(self.log_file_path)
# 打开日志文件 if log_file.open(QIODevice.ReadOnly): # 定位到上次读取的位置 log_file.seek(self.last_pos)
# 读取新内容            new_bytes = log_file.readAll() new_text = bytes(new_bytes).decode('gbk', errors='replace')
# 更新最后读取的位置 self.last_pos = log_file.pos() # 手动关闭文件 log_file.close()
# 如果有新内容,则追加到文本编辑器中 if new_text: self.log_display.moveCursor(QTextCursor.End) self.log_display.insertPlainText(new_text) self.log_display.ensureCursorVisible()
# 默认显示最新1000行数据 self.trim_log_lines(1000)
    def trim_log_lines(self, trim_lines): # 获取文本编辑器的当前内容 all_text = self.log_display.toPlainText()
scrollbar = self.log_display.verticalScrollBar() scrollbar_value = scrollbar.value()
is_at_bottom = scrollbar_value == scrollbar.maximum()
lines = all_text.split('\n')
# 如果行数超过1000,只保留最后的1000行 if len(lines) > trim_lines:            trimmed_text = '\n'.join(lines[-trim_lines:]) self.log_display.setPlainText(trimmed_text)
# 如果之前滚动条在最底部,添加新文本后继续保持在最底部 if is_at_bottom: scrollbar.setValue(scrollbar.maximum())            else:                scrollbar.setValue(scrollbar_value)

(左右滑动查看完整代码)

这里面有两个地方是可以根据自己实现场景自定义的,如下:

一是显示最新日志的更新时间,目前设定的是1秒,如果需要设置其他间隔时间,可以在这里修改

二是界面窗口显示的日志内容,目前设定的是显示最新的1000行,如果想设置显示内容行数,可以在这里修改



启动程序main.py

# -*- coding: utf-8 -*-import sys
from PySide6.QtWidgets import QApplication
from log_monitor import LogMonitor
app = QApplication(sys.argv)# 日志路径log_file_path = "logs.log"
monitor = LogMonitor(log_file_path=log_file_path)monitor.show()
sys.exit(app.exec())

(左右滑动查看完整代码)


其中,日志路径根据实际情况定义即可


启动运行

在自己电脑上启动,直接切换到venv下,输入:

python main.py

即可,这时会弹出【日志监控】的窗口,看一下效果:




总结

栈通过PySide6制作一个简单的日志监控工具,目前只是简单的显示,后续会逐步添加一些小功能

PySide6 是一个强大的库,用于创建复杂和功能齐全的跨平台 GUI 应用程序。它提供丰富的控件,如按钮、文本框、标签和复杂的布局,可以帮助您构建专业级的应用程序。

有兴趣的同学可以进一步探索。


源码已整理:




有兴趣的朋友点个“”和“在看”,谢谢支持~!

后台回复“log_monitor”即可获取!


     

文章就分享到这儿,喜欢就点个吧!



推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章