PyQt6 多输出日志类与日志Widget:同时输出到 GUI 文本框与文件,并支持自动轮转。
Project description
fry-qt6-logger
PyQt6 多输出日志类与日志 Widget:同时输出到 GUI 文本框与日志文件,并支持日志文件按条数自动轮转。
安装
pip install fry-qt6-logger
依赖会自动安装 PyQt6。Python ≥ 3.9。
两个核心类,按需取用
| 类 | 用途 |
|---|---|
FryLogger |
纯日志类。可独立使用(仅写文件),也可附加任意支持 append() 的控件 |
FryLoggerWidget |
日志显示控件。继承自 QTextEdit,自带颜色样式、右键菜单与导出功能 |
简单原则:只要日志类,就用
FryLogger;要 GUI 显示,就用FryLoggerWidget。
快速上手
1. 只要日志类(无 GUI 也能跑)
from fry_qt6_logger import FryLogger
logger = FryLogger(log_dir="logs", max_entries_per_file=1000)
logger.log_info("应用启动")
logger.log_success("数据加载完毕")
logger.log_warning("配置文件缺字段,已使用默认值")
logger.log_error("网络连接失败")
日志文件会写入 logs/log_<时间戳>_0000.txt,达到 max_entries_per_file 条后自动滚到下一个文件。
2. 要 GUI 日志控件
import sys
from PyQt6.QtWidgets import QApplication, QMainWindow
from fry_qt6_logger import FryLoggerWidget
app = QApplication(sys.argv)
win = QMainWindow()
win.setWindowTitle("FryLoggerWidget Demo")
log_widget = FryLoggerWidget(log_dir="logs")
win.setCentralWidget(log_widget)
log_widget.log_info("我是普通信息(灰色)")
log_widget.log_success("我是成功(绿色)")
log_widget.log_warning("我是警告(橙色)")
log_widget.log_error("我是错误(红色)")
log_widget.log_important("我是重要(紫色)")
log_widget.log_group_begin("批处理开始")
log_widget.log_info("处理 1 / 3")
log_widget.log_info("处理 2 / 3")
log_widget.log_info("处理 3 / 3")
log_widget.log_group_end("批处理结束")
win.resize(900, 500)
win.show()
sys.exit(app.exec())
控件右键支持:清除日志、复制、全选、导出 TXT。
3. 把 print / 异常输出重定向到日志
import sys
from fry_qt6_logger import FryLoggerWidget, StdoutRedirector, StderrRedirector
log_widget = FryLoggerWidget()
sys.stdout = StdoutRedirector(log_widget)
sys.stderr = StderrRedirector(log_widget)
print("现在 print 会出现在 GUI 日志里")
4. 用字符串选择级别
log_widget.log_by_level("ERROR", "网络错误") # 英文
log_widget.log_by_level("警告", "配置缺失") # 中文
log_widget.log_by_level("success", "保存成功") # 大小写不敏感
支持的级别别名见 docs/CORE_CONCEPTS.md。
项目结构
fry-qt6-logger/
├── pyproject.toml # 打包配置
├── README.md # 你正在看的文件
├── LICENSE # MIT
├── docs/
│ └── CORE_CONCEPTS.md # 核心关键点(推荐阅读)
├── examples/ # 可直接运行的示例
│ ├── 01_logger_only.py
│ ├── 02_widget_basic.py
│ ├── 03_widget_full_demo.py
│ ├── 04_redirect_stdio.py
│ └── 05_log_by_level.py
├── src/
│ └── fry_qt6_logger/ # 包源代码
│ ├── __init__.py
│ ├── logger.py # FryLogger
│ ├── widget.py # FryLoggerWidget
│ └── redirector.py # Stdout/StderrRedirector
└── tests/ # pytest 测试
├── test_logger.py
└── test_widget.py
运行示例
# 1) 纯日志,不需要 Qt 显示
python examples/01_logger_only.py
# 2) 最简 GUI 例子
python examples/02_widget_basic.py
# 3) 完整 demo(含分组、级别切换、stdout 重定向)
python examples/03_widget_full_demo.py
跑测试
pip install -e ".[dev]"
pytest
tests/test_logger.py不需要 GUI,CI 环境也能跑。tests/test_widget.py依赖pytest-qt,需要可创建QApplication的环境。
核心关键点速读
完整版见 docs/CORE_CONCEPTS.md。
- GUI 与文件双输出:
_log()是唯一的入口,分别写 widget HTML 与logging.FileHandler。 - 自动轮转:每个文件最多
max_entries_per_file条,超过自动开新文件,文件名带递增序号。 - 解耦:
FryLogger通过 duck-typing 的log_widget.append(html)与控件耦合,所以连None也可以传,无 GUI 场景照样工作。 - 级别名兼容:中文(信息 / 警告 / 错误 / 成功 / 重要 / 组开始 / 组结束)与英文别名(INFO / WARNING / ERROR / SUCCESS / IMPORTANT / GROUP_BEGIN / GROUP_END / OK / FAIL …)。
- 彩色 HTML 渲染:通过
QTextEdit.append写 HTML,时间戳灰色、消息按级别上色。 - Widget 自带菜单:清除 / 复制 / 全选 / 导出 TXT,无需额外接线。
- logger 实例唯一名:内部用
id(self)当 logger 名,多个FryLogger互不串扰。
License
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fry_qt6_logger-0.1.0.tar.gz.
File metadata
- Download URL: fry_qt6_logger-0.1.0.tar.gz
- Upload date:
- Size: 20.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c21eb99465bc628d07a4deb168ea7a0cf09ee861e00e97c83455edfc195f6fca
|
|
| MD5 |
40712895f6ebd4e941425237195f8b50
|
|
| BLAKE2b-256 |
1de01eef2489c777740133bbb570a2db361e222fe34b6440ee01c4414c07d7fc
|
File details
Details for the file fry_qt6_logger-0.1.0-py3-none-any.whl.
File metadata
- Download URL: fry_qt6_logger-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
347fded09cde3fefcd15f750d7a840e8e177666f277b01fc430220d1d37eff29
|
|
| MD5 |
8b59bf26706d5b35044a5771711b41a5
|
|
| BLAKE2b-256 |
e9a032439086c08320f1efde6127142a9d0a09914ac981fb59e6cbc9c4825c3f
|