< 返回版块

colatea 发表于 2023-08-24 18:42

Tags:tracing

如题

我把tracing的初始化写在一个独立文件,main程序调用,格式什么都没有问题,但是就是不写入文件

请教正确写法

pub fn init_log(log_level: &String, evn: &String) {
    LOGINIT.call_once(|| {
            let level = match log_level.to_lowercase().as_str() {
              "error" => Level::ERROR,
              "warn" => Level::WARN,
              "info" => Level::INFO,
              "debug" => Level::DEBUG,
              "trace" => Level::TRACE,
                _ => Level::INFO
            };

            let local_time = OffsetTime::new(
                UtcOffset::from_hms(8, 0, 0).unwrap(),
                format_description!("[year]-[month]-[day] [hour]:[minute]:[second].[subsecond digits:3]"),
            );
        
            match evn.as_str().cmp("dev").is_eq() {
                true => {
                    let file_appender: RollingFileAppender = tracing_appender::rolling::daily("logs", "server.log");
                    let (non_blocking, _guard) = tracing_appender::non_blocking(file_appender);
                    tracing_subscriber::fmt()
                    .with_writer(non_blocking)
                    .with_max_level(level)
                    .with_timer(local_time)
                    .with_thread_names(true)
                    .with_thread_ids(true)
                    .init();
                },
                false => {
                    tracing_subscriber::fmt()
                    .with_max_level(Level::DEBUG)
                    .with_timer(local_time)
                    .with_thread_names(true)
                    .init();
                }
            };
    })
}

评论区

写评论
作者 colatea 2023-08-30 17:22

感谢大佬关注。

最后我用 rolling-file 这个库替代轮转功能。效果不错。

A rolling file appender with customizable rolling conditions. Includes built-in support for rolling conditions on date/time (daily, hourly, every minute) and/or size.

最后问一下,大佬推荐用哪个日志库?

苦瓜小仔 2023-08-28 23:36

文档 写了按照 UTC 时间追加

RollingFileAppender automatically appends the current date in UTC.

粗略看了下,打个 patch,改一下时间就可以 https://github.com/tokio-rs/tracing/blob/tracing-appender-0.2.2/tracing-appender/src/rolling.rs#L146

let now = OffsetDateTime::now_utc().replace_offset(time::UtcOffset::from_hms(8, 0, 0).unwrap());

时区问题有两年没解决了:https://github.com/tokio-rs/tracing/issues/1645

最新分支没发版,但改成了 Builder 模式,其实可以提交一个 PR,在 Builder 中配置这个时间。https://github.com/tokio-rs/tracing/blob/master/tracing-appender/src/rolling.rs#L195

--
👇
colatea: 这个库有坑,设置了+8时区后,日志打印里时间对了,但是轮转的时间居然还是按照utc0时间轮转。

作者 colatea 2023-08-28 12:29

这个库有坑,设置了+8时区后,日志打印里时间对了,但是轮转的时间居然还是按照utc0时间轮转。

大佬,有其他配合tracing轮转兼限制文件数量的库推荐不?感谢

作者 colatea 2023-08-25 09:30

感谢大佬

--
👇
苦瓜小仔: WorkerGuard 需要一直保留到日志记录结束:

demo (顺便精简了一下代码)

苦瓜小仔 2023-08-24 20:28
1 共 5 条评论, 1 页