【PyQt5】logging封装+pyqt5展示系统日志

这篇具有很好参考价值的文章主要介绍了【PyQt5】logging封装+pyqt5展示系统日志。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

logging封装

  1. 创建logging对象

  2. 设置日志输出级别

  3. 指定日志输出格式

  4. 指定日志输出路径

  5. 指定日志输出文件

  6. 控制台输出

  7. 文件输出

    7.1 指定FileHandler
    7.2 设置日志输出格式
    7.3 设置过滤条件
    7.4 将文件输出日志添加过滤条件
    7.5 对logger增加handler日志处理器

import logging
import os
import time
from pathlib import Path


class Logger:
    def __init__(self):
        self.logger = logging.getLogger()

        _level = "INFO"

        try:
            self.logger.setLevel(_level.upper())
        except ValueError:
            self.logger.setLevel(logging.INFO)

        # 指定日志输出格式
        self.formatter = logging.Formatter(
            "%(asctime)s - [%(filename)s] -[%(funcName)s:%(lineno)s] - %(levelname)s : %(message)s"
        )

        # 指定日志输出路径
        self.log_path = "C:/tmp/log/"
        if not Path(self.log_path).is_dir():
            os.makedirs(self.log_path)

        # 指定日志输出文件
        _rq = time.strftime("%Y%m%d%H%M%S", time.localtime(time.time()))
        self.log_info_file = self.log_path + _rq + '.log'

        # 控制台输出
        self.set_console_logger()
        # 文件输出
        self.set_file_logger()

    def set_file_logger(self):
        """
        将日志输出到文件
        :return:
        """
        log_handler_info = logging.FileHandler(self.log_info_file, mode='w', encoding='utf-8')
        # 设置日志输出格式
        log_handler_info.setFormatter(self.formatter)
        # 设置过滤条件
        info_filter = logging.Filter()
        info_filter.filter = lambda record: record.levelno >= logging.INFO
        # 将文件输出日志添加过滤条件
        log_handler_info.addFilter(info_filter)
        # 对logger增加handler日志处理器
        self.logger.addHandler(log_handler_info)

    def set_console_logger(self):
        """
        将日志输出到控制台
        """
        _ch = logging.StreamHandler()
        _ch.setLevel(logging.INFO)
        _ch.setFormatter(self.formatter)
        self.logger.addHandler(_ch)

    def get_logger(self):
        return self.logger


logger = Logger().get_logger()

Qt designer绘制UI界面

1.cmd中输入命令,将.ui转换成.py

pyuic5 -o system_log.py system_log.ui

2.重新封装QPlainTextEdit

system_log.py

import logging
from PyQt5 import QtCore, QtGui, QtWidgets

from logger import logger


class QTextEditLogger(logging.Handler):
    def __int__(self, parent):
        super().__init__()
        self.widget = QtWidgets.QPlainTextEdit(parent)
        self.widget.setReadOnly(True)

    def emit(self, record):
        msg = self.format(record)
        self.widget.appendPlainText(msg)


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(399, 335)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setObjectName("verticalLayout")

        # self.plainTextEdit = QtWidgets.QPlainTextEdit(self.widget)
        # self.plainTextEdit.setObjectName("plainTextEdit")
        # self.verticalLayout.addWidget(self.plainTextEdit)

        self.logTextBox = QTextEditLogger(self.widget)
        logger.addHandler(self.logTextBox)
        logger.setLevel(logging.INFO)
        self.verticalLayout.addWidget(self.logTextBox.widget)

        self.pushButton = QtWidgets.QPushButton(self.widget)
        self.pushButton.setObjectName("pushButton")
        self.verticalLayout.addWidget(self.pushButton)
        self.horizontalLayout.addWidget(self.widget)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 399, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "开始"))

编写启动脚本

将UI和实现逻辑分开

operate.py

import datetime
import time

from logger import logger


def print_logger():
    for _ in range(100):
        logger.info(datetime.datetime.now())
        time.sleep(0.5)


def print_logger2():
    for index in range(100):
        logger.info(index)
        time.sleep(0.3)

tools.py文章来源地址https://www.toymoban.com/news/detail-460804.html

import sys
import threading

import operate
from system_log import Ui_MainWindow
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMainWindow


class LoggerWin(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.listener()

    def listener(self):
        # 开始
        self.pushButton.clicked.connect(self.working)

    def working(self):
        # 需要添加多线程才可以实现,实时展示系统日志,否则需要等到后台的方法执行完毕才会把所有的日志全部展示出来
        # operate.print_logger()
        t1 = threading.Thread(target=operate.print_logger)
        t2 = threading.Thread(target=operate.print_logger2)
        t1.daemon = True
        t1.start()
        t2.start()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    log_win = LoggerWin()
    log_win.show()
    log_win.raise_()
    sys.exit(app.exec_())


到了这里,关于【PyQt5】logging封装+pyqt5展示系统日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 智能停车场系统:基于 pyqt5,opencv,MySQL

    这是一个相对复杂的项目,需要使用多个技术和模块来实现。以下是一个简单的示例代码,可以使用 Python 和 PyQt 实现一个简单的智能停车场管理系统。 在上面的示例代码中,我们使用了 PyQt5 库来创建 GUI 界面,使用了 OpenCV 库来读取摄像头数据,并使用了 PyTesseract 库来识别

    2024年02月11日
    浏览(18)
  • 使用python和pyqt5轻松上手人脸识别系统(含代码)

    使用python和pyqt5轻松上手人脸识别系统(含代码)

    最近在做一个人脸识别考勤系统,已经总结和记录了大部分内容,算是比较完善啦!后续把剩下的搞完,感兴趣的同学可以关注一下哦~ 文末给出了代码获取方式,请自行获取食用~ B站:马上就更!!!_bilibili CSDN:使用python和pyqt5轻松上手人脸识别系统(含代码)_百年后封笔

    2024年02月11日
    浏览(29)
  • 基于PyQt5的图形化界面开发——模拟医院管理系统

    基于PyQt5的图形化界面开发——模拟医院管理系统

    本节以医院管理系统为例,使用PyQt5模拟医院系统的功能。 本次用到的数据结构思想为队列,使用队列能够更真实的反映医院排队等候的情况(先挂号者先就诊),事实上 操作系统:Windows10 专业版 开发环境:Pycahrm Comunity 2022.3 Python解释器版本:Python3.8 第三方库:PyQt5 如果你

    2024年02月02日
    浏览(68)
  • python pyqt5与opencv 遇到的那些坑,pyqt5页面搭建,设置pyqt5设置背景图

    设置pyqt5的背景图片,可以设置一个lable控件,将控件至于底层,然后设置他的背景图 注意路径 解决代码 使用Qt Desiggnei 绘制界面后转换成py代码后 最好不要在生成的py页面代码添加 信号槽,到时候页面改动比较麻烦 转换代码 pyuic5 -o 【转换后的.py】 【UI界面的.ui】 推荐的方

    2024年02月09日
    浏览(35)
  • 【Python进阶-PyQt5】00搭建PyQt5环境

    【Python进阶-PyQt5】00搭建PyQt5环境

    我们编写的程序,有时用到的Python库是不一样的,比如说开发桌面应用程序我们主要用到PyQt5相关的Python库、开发Web应用程序我们主要用到Django相关的Python库等等。假设我们在开发桌面应用程序的时候除了PyQt5相关的Python库外,还附加了其他的Python库,比如有关Django的Python库。

    2024年02月08日
    浏览(13)
  • 基于pyqt5开发的图书管理系统UI(带登录页面)

    基于pyqt5开发的图书管理系统UI(带登录页面)

    由于老师布置了关于图书馆UI界面的开发任务,因此做了这个UI界面,因为老师说用C#开发,而自己也不会,使用就pyqt去实现,希望这个UI界面对各位小伙伴有些帮助。UI主要是使用的designer去设计的,然后进行了界面的美化,对于里面的功能目前也只做了天气的,但是因为这个

    2024年02月12日
    浏览(13)
  • [pyqt5]关于在pyqt5界面上鼠标位置问题

    先上代码,主要看鼠标移动事件里面代码 通过运行代码可以发现: 上面这2行就是相当于屏幕左上角坐标了

    2024年02月15日
    浏览(17)
  • PyQt5入门(一)——PyQt5与QtDesigner的安装

    PyQt5入门(一)——PyQt5与QtDesigner的安装

    首先,需要确保你已经安装了Python和PIP,因为使用PIP来安装PyQt5是最简便的方法。以下是在Windows和Ubuntu环境下配置并安装PyQt5以及QtDesigner的步骤: 打开命令提示符(CMD)。 运行以下命令安装PyQt5:pip install pyqt5 安装完成后,在命令提示符中运行“python”命令,然后输入“im

    2024年02月02日
    浏览(12)
  • Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志

    Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志

    1.实际开发项目时,是使用Qt Designer来设计UI界面,得到一个.ui的文件,然后利用PyQt5安装时自带的工具 pyuic5 将.ui文件转换为.py文件: 样式图 QT5 UI: 转换的pyqt5: 效果: 2.Python学习之读取配置文件: 初始配置文件test.conf: 步骤1:导入配置文件模块 步骤2:创建配置文件对象 步骤

    2024年01月25日
    浏览(14)
  • 基于PyQt5GUI的人脸识别系统设计与实现

    基于PyQt5GUI的人脸识别系统设计与实现

    目 录 前 言 1 第 1 章 人脸识别系统概述 1 第 2 章 人脸检测技术 1 §2.1 基于 Harr 级联的人脸检测 2 §2.2 基于 face_recognition 开源库的人脸检测… 错误!未定义书签。第 3 章 人脸识别技术 5 §3.1 构造人脸数据集 5 §3.2 模型训练 7 §3.3 实时人脸识别 9 第 4 章 基于 PyQt5 的应用平台 1

    2024年02月04日
    浏览(12)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包