#log-messages #tui #logger #log #widgets #logging #dispatcher

tui-logger

ratatui crate提供的智能小部件的日志记录器

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 调试

Download history 1331/week @ 2024-05-03 1487/week @ 2024-05-10 1881/week @ 2024-05-17 1463/week @ 2024-05-24 2433/week @ 2024-05-31 2038/week @ 2024-06-07 2238/week @ 2024-06-14 2136/week @ 2024-06-21 1897/week @ 2024-06-28 1762/week @ 2024-07-05 2719/week @ 2024-07-12 1920/week @ 2024-07-19 2194/week @ 2024-07-26 2142/week @ 2024-08-02 2163/week @ 2024-08-09 1591/week @ 2024-08-16

每月8,535次下载
35个crate中使用(其中33个直接使用)

MIT许可

8MB
2K SLoC

Build Status

tui-logger

tuiratatui crate提供的智能小部件日志记录器

dependency status Build examples

小部件演示

Demo

文档

文档

针对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的键命令。

目标选择器小部件看起来是这样的

widget

它控制

  • 记录器捕获日志消息
  • 选择要在日志消息视图中显示的级别

两列的含义如下

  • 代码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的应用程序

感谢

Star 历史

Star History Chart

许可证:MIT

依赖项

~7–17MB
~225K SLoC