toolkit-rs 1.0.29

Rust toolkit library(logger, time, painc handle)
Documentation

toolkit-rs

一个轻量的 Rust 工具库,围绕以下几类常用能力做了封装:

  • 时间格式化
  • 文件日志初始化与滚动清理
  • panic 捕获与落盘
  • 基于 Tokio 的延迟退出 / 延迟重启辅助函数

仓库地址:https://github.com/yaobo-lab/toolkit-rs

功能概览

time

始终可用,无需开启 feature。

  • get_local_time(): 返回当前本地时间字符串
  • DATETIME_FORMAT: 默认时间格式常量,格式为 %Y.%m.%d %H:%M:%S

logger feature

启用后提供日志初始化能力,底层基于 flexi_logger + log。

  • 支持日志级别配置
  • 支持日志文件大小滚动
  • 支持按天保留或按文件数量保留
  • 支持同时输出到控制台
  • 支持多种输出格式

可用格式:

  • LogStyle::Default
  • LogStyle::Line
  • LogStyle::Module
  • LogStyle::Full

核心入口:

  • logger::setup(LogConfig)

panic_handle feature

启用后提供 panic hook:

  • 记录 panic 时间、线程、位置、版本信息
  • 输出 backtrace
  • 将内容写入 panic.log 或系统临时目录中的 panic.log
  • 可配置 panic 后是否立即退出进程

核心入口:

  • painc::set_panic_handler(PaincConf)

说明:模块名当前为 painc,这是仓库现有公开 API 的一部分,README 按实际代码说明。

其他辅助函数

库根模块还提供两个异步辅助函数:

  • after_app_exist(sec): 延迟退出当前进程
  • after_reboot(sec): Linux 下延迟执行系统重启,Windows 下仅输出警告

这两个函数内部使用 Tokio 任务调度。

安装

Cargo.toml 示例:

[dependencies]
toolkit-rs = { version = "1.0.22", features = ["logger", "panic_handle"] }

如果你只需要时间工具:

[dependencies]
toolkit-rs = "1.0.22"

Feature Flags

[dependencies]
toolkit-rs = { version = "1.0.22", features = ["logger"] }
  • logger: 启用日志模块
  • panic_handle: 启用 panic 捕获模块

当前仓库更推荐至少启用 logger feature 使用;因为库中部分辅助函数会引用 log 宏。

快速开始

1. 时间工具

use toolkit_rs::get_local_time;

fn main() {
    println!("now: {}", get_local_time());
}

2. 初始化日志

use toolkit_rs::logger::{self, LogConfig, LogStyle};

fn main() {
    let mut cfg = LogConfig::default();
    cfg.level = 4;
    cfg.style = LogStyle::Module;
    cfg.size_mb = 10;
    cfg.keep_file_count = Some(5);
    cfg.console = true;

    logger::setup(cfg).expect("init logger failed");

    log::debug!("debug message");
    log::info!("info message");
    log::warn!("warn message");
    log::error!("error message");
}

3. 设置 panic 处理

use toolkit_rs::painc::{set_panic_handler, PaincConf};

fn main() {
    set_panic_handler(PaincConf {
        version: env!("CARGO_PKG_VERSION").to_string(),
        build_time: "2026-03-20".to_string(),
        painc_exit: true,
    });

    panic!("something went wrong");
}

4. 组合使用

use std::process;
use toolkit_rs::{
    logger::{self, LogConfig, LogStyle},
    painc::{set_panic_handler, PaincConf},
};

fn main() {
    set_panic_handler(PaincConf::default());

    let mut cfg = LogConfig::default();
    cfg.style = LogStyle::Module;
    cfg.size_mb = 1;
    cfg.keep_file_count = Some(2);

    logger::setup(cfg).unwrap_or_else(|e| {
        eprintln!("log setup err: {}", e);
        process::exit(1);
    });

    log::info!("toolkit-rs started");
}

运行示例

仓库内置示例:

cargo run --example demo --features panic_handle,logger

API 导出

库对部分常用依赖做了 re-export,便于统一使用:

  • toolkit_rs::anyhow
  • toolkit_rs::chrono
  • toolkit_rs::serde
  • toolkit_rs::AppResult

开发与验证

已在当前仓库验证:

cargo test --features logger,panic_handle
cargo run --example demo --features panic_handle,logger

补充说明:

  • 当前 cargo test 在不启用 feature 的情况下会编译失败
  • tests/testcase.rs 目前仅包含基础占位测试

许可证

MIT License,见 LICENSE。