traceing 库默认的是utc时区,日志打印出来都是8小时之前的,有没有大佬知道怎么更改traceing 库输出日志的时区,示例代码如下: 好像只要修改with_timer就可以了
tracing_subscriber::fmt()
.with_writer(mk_writer)
.with_max_level(Level::TRACE)
.with_timer(tracing_subscriber::fmt::time::time())
.init();
我在源码里找到了这个例子 https://github.com/tokio-rs/tracing/blob/master/tracing-subscriber/src/fmt/time/time_crate.rs 110 行
看文档的提示好像按照下面的写法就可以了,但是这样写会报找不到 LocalTime
in `fmt::time,
use tracing_subscriber::fmt::{self, time::LocalTime};
use time::macros::format_description;
let timer = LocalTime::new(format_description!("[hour]:[minute]:[second]"));
tracing_subscriber::fmt()
.with_writer(mk_writer)
.with_max_level(Level::TRACE)
.with_timer(timer)
.init();
这是我的 cargo.toml
[package]
name = "trace-example"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
axum = "0.4.5"
tokio = { version = "1.0", features = ["full"] }
tracing = "0.1.*"
tracing-subscriber = "0.3.8"
tracing-appender = "0.2"
tracing-log = "0.1.2"
log ="0.4.14"
tower-http = { version = "0.2.0", features = ["trace"] }
time = { version = "0.3", features = ["formatting", "macros"] }
有没有大佬指点一下
评论区
写评论tracing-subscriber 是支持修改本地时间的 至少在2021前,只有一个实现方法就是采用time的Localtime来解决, 但问题来了 tracing里时间格式如果不是unix,在线程就会出现 这是因为在unix系统上,时间箱拒绝在没有--cfg unsound_local_offset的情况下获取本地偏移量,这会变成一个错误,该错误会通过格式冒泡,直到到达tracing_subscriber::fmt::FmtLayer:: on_event() 只会丢弃错误并且不记录任何内容。这是很令人惊讶的错误,没有考虑到时区不同的情况,tracing作者意识到这一点就有人提了pr,把OffsetTime格式添加进去,在没有unsound_local_offset的情况下可以使用偏移时区 接下说一下解决办法:2024年
tracing = "0.1.40" tracing-subscriber = { version = "0.3.18", features = ["local-time"] } ok,此贴完毕,并且一点不要去使用LocalTime::rfc_3330() 他没去做适配,虽然你发现也能用 只是你的日志都在主线程里,你单开一个线程,在这个线程里使用日志,就会出现 .
好的,谢谢大佬指点,爱你呦~
--
👇
dlhxzb: 恐怕要放到.cargo\config.toml
https://doc.rust-lang.org/nightly/cargo/reference/config.html#configuration
恐怕要放到.cargo\config.toml
https://doc.rust-lang.org/nightly/cargo/reference/config.html#configuration
大佬霸气,我试了一下这样也是可以了,学到了,谢谢大佬~ 请教大佬,RUSTFLAGS 这个玩意还没见过,能不能加到配置里面?
--
👇
dlhxzb: 我是CentOS7.5,cmd:
RUSTFLAGS="--cfg unsound_local_offset" cargo run
大佬威武,这样确实linux 下就没问题了,学到了,谢谢大佬~
--
👇
c5soft: 换一种玩法,时区手工指定,format_description用宏, Linux应该就没问题了:
Cargo.toml依赖:
我是CentOS7.5,cmd:
RUSTFLAGS="--cfg unsound_local_offset" cargo run
换一种玩法,时区手工指定,format_description用宏, Linux应该就没问题了:
Cargo.toml依赖:
大佬你是不是再windows 下编译的,我在windows下不加 RUSTFLAGS="-cfg unsound_local_offset" 编译也成功了
不过也是在rockylinux8.5 下编译不显示时间,我等会回家再换个系统试试,可能是rockylinx8.5这个系统太新了 哈哈哈,我回家试试centos8.2
--
👇
dlhxzb: 试了下你的代码,好像没什么问题。。
感谢大佬,这个方法可以的,我在windows 下运行成功了 2022-02-21 19:01:11.752 DEBUG trace_example: listening on 0.0.0.0:3000 2022-02-21 19:01:11.757 TRACE mio::poll: registering event source with poller: token=Token(0), interests=READABLE | WRITABL
不过我在rockylinx8.5 下编译失败了,Result::unwrap() thread 'main' panicked at 'called
Result::unwrap()
on anErr
value: IndeterminateOffset', src/main.rs:38:47 可能跟操作系统有关,我再研究下 。。。--
👇
c5soft: main.rs中这样写:
Cargo.toml中这样写:
日期与时间格式看这里
大佬你是把它放到环境变量里export RUSTFLAGS="-cfg unsound_local_offset" cargo r 还是 cargo run RUSTFLAGS="-cfg unsound_local_offset" cargo r 这两种我都试了日志能出来,时间是unknown time 。。。 。
--
👇
dlhxzb: 试了下你的代码,好像没什么问题。。
加上环境变量rust_log识别:
试了下你的代码,好像没什么问题。。
输出效果:
main.rs中这样写:
Cargo.toml中这样写:
日期与时间格式看这里
试了一下编译能通过,不过日志的时间还是消失了前面的时间变成 unknown time 我把我的全部代码贴一下,大佬有兴趣可以试下
--
👇
dlhxzb: Sorry, 试试这个
RUSTFLAGS="--cfg unsound_local_offset" cargo r
Sorry, 试试这个
RUSTFLAGS="--cfg unsound_local_offset" cargo r
cargo build 加上这个不认--cfg unsound_local_offset error: Found argument '--cfg' which wasn't expected, or isn't valid in this context 太痛苦了,tarceing 库应该挺常用的吧,感觉时区挺常见的,为什么改个时区好难啊...
--
👇
dlhxzb: > 我觉得应该跟cfg 有关,但是不知道cfg 咋用是在方法前加上 #[cfg(unsound_local_offset)] 宏还是啥
按doc说的这可能是个编译选项,在cargo build后面加
--cfg unsound_local_offset
按doc说的这可能是个编译选项,在cargo build后面加
--cfg unsound_local_offset
大佬,我是这样写的,好像不行,init 方法会报错,但是我看了init 里面包含了finish 方法 ``rust
tracing_subscriber::fmt() .with_writer(mk_writer) .with_max_level(Level::TRACE) .with_timer(UtcOffset::from_hms(8, 0, 0).unwrap()) .init();
大佬威武,引入 features = ["local-time"]后确实编译通过了,不过,时间却显示不出来,显示是
DEBUG trace_example: listening on 0.0.0.0:3000
我觉得应该跟cfg 有关,但是不知道cfg 咋用是在方法前加上 #[cfg(unsound_local_offset)] 宏还是啥
👇
dlhxzb: Struct tracing_subscriber::fmt::time::LocalTime
加features试试,类似
还有这个编译
--cfg
可能也得注意0.2的时候用过
ChronoLocal
还没这么麻烦