58个版本
新版本 0.12.0 | 2024年8月18日 |
---|---|
0.11.2 | 2024年7月17日 |
0.11.1 | 2024年4月26日 |
0.11.0 | 2024年2月5日 |
0.1.13 | 2018年5月25日 |
#23 in 调试
每月8,535次下载
在35个crate中使用(其中33个直接使用)
8MB
2K SLoC
tui-logger
为tui
和ratatui
crate提供的智能小部件日志记录器
小部件演示
文档
针对tui
的重要说明
tui
crate已被存档,ratatui
已接替。为了避免支持已不活跃的crate的兼容性,v0.9.x版本是最后一个支持tui
的版本。如果需要未来的错误修复,已创建分支tui_legacy
来跟踪0.9.x版本的更改。
从v0.10版本开始,tui-logger
仅支持ratatui
。
特性
log
crate的日志实现- 通过散列表检测日志启用/禁用(避免字符串比较)
- 热日志代码仅将启用的日志消息和时间戳复制到循环缓冲区
- Widgets/move_message()从热循环缓冲区检索捕获的日志消息
- 由于循环缓冲区导致的消息丢失检测
- 在日志记录目标上执行日志过滤
- 简单的Widgets用于查看日志并按目标配置调试级别
- 将启用的日志记录到文件
- 在日志历史中滚动
- 可以配置目标和对数窗格的标题
- 支持
slog
,提供Drain以集成到您的slog
基础设施中 - 支持
tracing
- 允许为特定于文件记录的目标配置日志级别
- 避免在每个日志记录中重复目标、模块和文件名
- 通过键盘命令同时修改所有目标的显示/热记录日志级别
智能小部件
智能小部件由两个部件组成。左侧是目标选择器小部件,右侧是向上滚动的日志消息视图。目标选择器小部件可以通过键命令在运行时隐藏/显示。通过transition()函数提供给TuiLoggerWidget的键命令。
目标选择器小部件看起来是这样的
它控制
- 记录器捕获日志消息
- 选择要在日志消息视图中显示的级别
两列的含义如下
- 代码EWIDT:E代表错误,W代表警告、信息、调试和跟踪。
- 倒置字符(EWIDT)是视图中启用的日志级别
- 普通字符显示每个目标启用的日志级别捕获
- 如果EWIDT中的任何一项没有显示,则相应的日志级别不会捕获
- 日志事件的目标可以在日志中定义,例如:
warn!(target: "demo", "Log message");
智能小部件键命令
| KEY | ACTION
|----------|-----------------------------------------------------------|
| h | Toggles target selector widget hidden/visible
| f | Toggle focus on the selected target only
| UP | Select previous target in target selector widget
| DOWN | Select next target in target selector widget
| LEFT | Reduce SHOWN (!) log messages by one level
| RIGHT | Increase SHOWN (!) log messages by one level
| - | Reduce CAPTURED (!) log messages by one level
| + | Increase CAPTURED (!) log messages by one level
| PAGEUP | Enter Page Mode and scroll approx. half page up in log history.
| PAGEDOWN | Only in page mode: scroll 10 events down in log history.
| ESCAPE | Exit page mode and go back to scrolling mode
| SPACE | Toggles hiding of targets, which have logfilter set to off
键到动作的映射必须在应用程序中完成。相应的TuiWidgetEvent必须提供给TuiWidgetState::transition()。
关于页面模式的备注:事件历史底部行的事件时间戳用作参考。这意味着,从目标选择器窗口中切换EWIDT/焦点中的过滤器应该像预期的那样工作,而不会在历史记录中跳跃。下一页/下一页根据事件的可见性前进。
初始化记录器系统的基本用法
#[macro_use]
extern crate log;
//use tui_logger;
fn main() {
// Early initialization of the logger
// Set max_log_level to Trace
tui_logger::init_logger(log::LevelFilter::Trace).unwrap();
// Set default level for unknown targets to Trace
tui_logger::set_default_level(log::LevelFilter::Trace);
// code....
}
有关小部件的使用,请参阅示例/示例.rs
演示
使用termion运行演示
cargo run --example demo --features termion
使用crossterm运行演示
cargo run --example demo --features crossterm
slog
支持
tui-logger
提供了一个实现slog::Drain
的TuiSlogDrain,并将接收到的所有记录路由到tui-logger
小部件。
通过功能“slog-support”启用
tracing-subscriber
支持
tui-logger
提供了一个实现tracing_subscriber::Layer
的TuiTracingSubscriberLayer,并将接收到的所有事件收集到tui-logger
小部件。
通过功能“tracing-support”启用
自定义过滤
#[macro_use]
extern crate log;
//use tui_logger;
use env_logger;
fn main() {
// Early initialization of the logger
let drain = tui_logger::Drain::new();
// instead of tui_logger::init_logger, we use `env_logger`
env_logger::Builder::default()
.format(move |buf, record|
// patch the env-logger entry through our drain to the tui-logger
Ok(drain.log(record))
).init(); // make this the global logger
// code....
}
使用tui-logger的应用程序
感谢
- Florian Dehau 为他的优秀crate tui-rs
- Antoine Büsch 为提供tui-rs v0.3.0和v0.6.0的补丁
- Adam Sypniewski 为提供tui-rs v0.6.2的补丁
- James aka jklong 为提供tui-rs v0.7的补丁
- icy-ux 为添加slog支持和示例
- alvinhochun 为更新到tui 0.10和crossterm支持
- brooksmtownsend 补丁以删除冗余的时间戳信息
- Kibouo 补丁以将Rc/Refcell更改为线程安全版本
- Afonso Bordado 为提供tui-rs v0.17的补丁
- Benjamin Kampmann 为提供tui-rs v0.18的补丁
- Paul Sanders 为提供在 问题 #30 中的补丁
- Ákos Hadnagy 为提供在 #31 中的补丁以支持 tracing-subscriber
- Orhun Parmaksız 为提供在 #33、#34、#37 和 #46 中的补丁
- purephantom 为提供在 #42 中的补丁以更新 ratatui
- Badr Bouslikhin 为提供在 #47 中的补丁以更新 ratatui
- ganthern 为提供在 #49 中的补丁以删除 tui 支持
- Linda_pp 为提供在 #51 中的补丁以支持 Cell:set_symbol
- Josh McKinney 为提供在 #56 中的补丁以在 TuiWidgetEvent 和 TuiLoggerWidget 中支持复制
- Tom Groenwoldt 为提供在 #65 中的补丁以更新 ratatui
Star 历史
许可证:MIT
依赖项
~7–17MB
~225K SLoC