logging封装
-
创建logging对象
-
设置日志输出级别
-
指定日志输出格式
-
指定日志输出路径
-
指定日志输出文件
-
控制台输出
-
文件输出
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文章来源:https://www.toymoban.com/news/detail-460804.html
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模板网!