#tokio #boot #signal #log #service #write-file

wixet-bootstrap

一个简单的库,用于启动您的应用程序中的基本服务

2 个稳定版本

1.0.1 2023年7月10日
1.0.0 2023年6月27日

#657配置


apecast 中使用

自定义许可协议

9KB
72

wixet-bootstrap

首先,这个库只有在您使用 tokio 且您的应用程序以异步方式运行时才有意义。

一些代码每次都会使用。对于 Wixet 来说,这个库就是这样。如果所有应用程序都有共同点,那就是启动过程。对于简单的程序或 "hello world",这很简单,但随着您的应用程序的增长,您总是会以某种方式实现它。

此库提供了一种简单但实用的最小启动过程

  • 使用 fern 配置日志记录器(格式和写入文件的选项)
  • 友好的退出和中断处理程序(ctr+c...)使用 signal-hook

如何使用它

看看这个简单的例子

use wixet_bootstrap::init;
use log::info;

#[tokio::main]
async fn main() {
    info!("This log line will be ignored because the logger is not configured yet");
    let (closer, exit) = init(Some("output.log"), None, None).await?; //If you provide None, it simple will not write a log file (just output)
    info!("Hello to my application!")

    // Do may awesome stuff spawing tokio tasks

    // I use select here because it is common to listen for multiple signals, but you can just await the `exit` if not
    tokio::select!{
        _ = exit.recv_async() => {
            info!("Shutdown process started");
            // Do your friendly stop process here
            // This code is run when ctrl+c or any other kill interrupt is received
        }
    };

    // A friendly shutdown by deinitializing all "init" stuff.
    closer.stop().await?;
    info!("Bye");

}

正如您所看到的,它非常简单且易于使用,但它节省了很多代码行。最重要的是,如果我们添加了新的功能/改进,它将适用于所有项目。

我希望保持这个库尽可能简单和通用,但如果您有想添加的有趣内容,我将很高兴听到它!

额外配置

默认日志级别

如果您不提供任何日志级别,将使用 info。要设置自己的偏好,请这样做

let (closer, exit) = init(Some("output.log"), Some(log::LevelFilter::Warn), None).await?;

其他模块的日志级别

如果您想设置默认日志级别但只更改某些模块的级别,您可以在哈希表中提供它们


let (closer, exit) = init(Some("output.log"), None, None).await?;

依赖关系

~5–14MB
~156K SLoC