LogWidget API¶
LogWidget(widget_id=None)
¶
Bases: BaseWidget
创建一个用于在邮件中优雅地显示日志信息的代码块。
该微件特别适合展示程序运行日志、错误报告或任何需要按时间顺序和
严重性级别呈现的信息。它能够自动解析 loguru
格式的日志字符串,
并根据日志级别(如 INFO, WARNING, ERROR)以不同的颜色高亮显示,
使其内容清晰易读。
核心功能
- Loguru 格式解析: 自动解析包含时间戳、级别、来源和消息的日志行。
- 级别高亮: 为不同的日志级别(DEBUG, INFO, WARNING, ERROR, CRITICAL)应用不同的颜色。
- 内容过滤: 可以设置一个最低日志级别,只显示该级别及以上的日志。
- 显示控制: 可以选择性地显示或隐藏时间戳、日志级别和来源信息。
- 滚动条: 当日志内容超出预设的最大高度时,会自动显示滚动条。
Examples:
接收一个 loguru
格式的日志列表并显示:
from email_widget.widgets import LogWidget
from email_widget.core.enums import LogLevel
log_messages = [
"2024-07-07 10:30:00.123 | INFO | my_app.main:run:45 - Application started successfully.",
"2024-07-07 10:31:15.456 | WARNING | my_app.database:connect:88 - Connection is slow.",
"2024-07-07 10:32:05.789 | ERROR | my_app.api:request:152 - Failed to fetch data from API."
]
log_viewer = (LogWidget()
.set_title("Application Run Log")
.set_logs(log_messages)
.set_max_height("300px")
.filter_by_level(LogLevel.WARNING)) # 只显示 WARNING 和 ERROR
# 假设 email 是一个 Email 对象
# email.add_widget(log_viewer)
通过 add_log_entry
方法逐条添加日志:
manual_log = (LogWidget()
.set_title("Manual Log Entries")
.add_log_entry("User logged in.", level=LogLevel.INFO, module="auth")
.add_log_entry("Invalid password attempt.", level=LogLevel.WARNING, module="auth"))
初始化LogWidget。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
widget_id
|
Optional[str]
|
可选的Widget ID。 |
None
|
Attributes¶
logs
property
¶
获取过滤后的日志列表。
如果设置了 filter_level
,则只返回符合过滤条件的日志。
Returns:
Type | Description |
---|---|
list[LogEntry]
|
List[LogEntry]: 过滤后的日志条目列表。 |
max_height
property
¶
获取日志显示区域的最大高度。
Returns:
Name | Type | Description |
---|---|---|
str |
str
|
最大高度的CSS值。 |
title
property
¶
获取日志组件的标题。
Returns:
Type | Description |
---|---|
Optional[str]
|
Optional[str]: 标题文本或None。 |
Functions¶
add_log_entry(message, level=LogLevel.INFO, timestamp=None, module=None, function=None, line_number=None)
¶
手动添加一个日志条目。
此方法允许直接创建 LogEntry
对象并添加到日志列表中,
适用于非Loguru格式的日志或需要自定义日志内容的情况。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message
|
str
|
日志消息内容。 |
required |
level
|
LogLevel
|
日志级别,默认为 |
INFO
|
timestamp
|
Optional[datetime]
|
日志记录的时间戳,默认为当前时间。 |
None
|
module
|
Optional[str]
|
记录日志的模块名称。 |
None
|
function
|
Optional[str]
|
记录日志的函数名称。 |
None
|
line_number
|
Optional[int]
|
记录日志的代码行号。 |
None
|
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
add_log_parser(log_parser)
¶
添加自定义日志解析器到解析器链中。
新添加的解析器会插入到PlainTextParser之前, 确保PlainTextParser始终作为兜底解析器。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
log_parser
|
LogParser
|
要添加的日志解析器实例。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
append_log(log)
¶
追加单条日志字符串。
日志字符串会被自动解析为 LogEntry
对象并添加到日志列表中。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
log
|
str
|
单条日志字符串。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
filter_by_level(level)
¶
按日志级别过滤显示。
只有级别等于或高于指定 level
的日志条目才会被显示。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
level
|
LogLevel
|
过滤的最低日志级别。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
get_template_context()
¶
获取模板渲染所需的上下文数据
set_log_level(level)
¶
设置日志过滤级别。
只有达到或高于此级别的日志才会被显示。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
level
|
LogLevel
|
最低日志级别。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
set_logs(logs)
¶
设置日志列表。
此方法会清空现有日志,并解析新的日志字符串列表。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
logs
|
List[str]
|
日志字符串列表。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
set_max_height(height)
¶
设置日志显示区域的最大高度。
当日志内容超出此高度时,将出现滚动条。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
height
|
str
|
CSS高度值,如 "400px", "50vh"。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
set_title(title)
¶
设置日志组件的标题。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
title
|
str
|
标题文本。 |
required |
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
show_level(show=True)
¶
设置是否显示日志条目的级别。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
show
|
bool
|
是否显示级别,默认为True。 |
True
|
Returns:
Name | Type | Description |
---|---|---|
LogWidget |
LogWidget
|
返回self以支持链式调用。 |
Examples:
日志条目 (LogEntry)¶
LogEntry(message, level=LogLevel.INFO, timestamp=None, module=None, function=None, line_number=None)
¶
表示单个日志条目的数据结构。
这个类用于封装从日志字符串中解析出来或手动创建的日志信息, 包括消息内容、日志级别、时间戳以及来源(模块、函数、行号)。
Attributes:
Name | Type | Description |
---|---|---|
message |
str
|
日志消息内容。 |
level |
LogLevel
|
日志级别,默认为 |
timestamp |
datetime
|
日志记录的时间戳,默认为当前时间。 |
module |
Optional[str]
|
记录日志的模块名称。 |
function |
Optional[str]
|
记录日志的函数名称。 |
line_number |
Optional[int]
|
记录日志的代码行号。 |
Examples:
from datetime import datetime
from email_widget.core.enums import LogLevel
# 创建一个信息级别的日志条目
info_log = LogEntry("用户登录成功", level=LogLevel.INFO, timestamp=datetime.now())
# 创建一个错误级别的日志条目,包含来源信息
error_log = LogEntry("数据库连接失败", level=LogLevel.ERROR,
module="db_connector", function="connect", line_number=123)
初始化LogEntry。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
message
|
str
|
日志消息内容。 |
required |
level
|
LogLevel
|
日志级别,默认为 |
INFO
|
timestamp
|
Optional[datetime]
|
日志记录的时间戳,默认为当前时间。 |
None
|
module
|
Optional[str]
|
记录日志的模块名称。 |
None
|
function
|
Optional[str]
|
记录日志的函数名称。 |
None
|
line_number
|
Optional[int]
|
记录日志的代码行号。 |
None
|