Skip to main content

fry-qt6-logger

PyQt6 多输出日志类与日志 Widget:同时输出到 GUI 文本框与日志文件,并支持日志文件按条数自动轮转。

Python PyQt6 License


安装

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

MIT

Release files for fry-qt6-logger 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for fry-qt6-logger 0.1.0
File Size Uploaded
fry_qt6_logger-0.1.0.tar.gz 20.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fry-qt6-logger 0.1.0
File Interpreter ABI Platform
fry_qt6_logger-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 32.3 kB

Release files / fry_qt6_logger-0.1.0.tar.gz

Download URL fry_qt6_logger-0.1.0.tar.gz
Size 20.8 kB
Tags Source
SHA-256 checksum
How to use checksums
c21eb99465bc628d07a4deb168ea7a0cf09ee861e00e97c83455edfc195f6fca
BLAKE2b-256 checksum
How to use checksums
1de01eef2489c777740133bbb570a2db361e222fe34b6440ee01c4414c07d7fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / fry_qt6_logger-0.1.0-py3-none-any.whl

Download URL fry_qt6_logger-0.1.0-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
347fded09cde3fefcd15f750d7a840e8e177666f277b01fc430220d1d37eff29
BLAKE2b-256 checksum
How to use checksums
e9a032439086c08320f1efde6127142a9d0a09914ac981fb59e6cbc9c4825c3f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page