Skip to main content

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

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

fry_qt6_logger-0.1.0.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fry_qt6_logger-0.1.0-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

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

Hashes for fry_qt6_logger-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c21eb99465bc628d07a4deb168ea7a0cf09ee861e00e97c83455edfc195f6fca
MD5 40712895f6ebd4e941425237195f8b50
BLAKE2b-256 1de01eef2489c777740133bbb570a2db361e222fe34b6440ee01c4414c07d7fc

See more details on using hashes here.

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

Hashes for fry_qt6_logger-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 347fded09cde3fefcd15f750d7a840e8e177666f277b01fc430220d1d37eff29
MD5 8b59bf26706d5b35044a5771711b41a5
BLAKE2b-256 e9a032439086c08320f1efde6127142a9d0a09914ac981fb59e6cbc9c4825c3f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page