Logging 更改环境记录器使用的时间戳格式

Logging 更改环境记录器使用的时间戳格式,logging,rust,timestamp,format,Logging,Rust,Timestamp,Format,下面是一个简单的例子 #[macro_use] extern crate log; extern crate env_logger; fn main() { std::env::set_var("MY_LOG_LEVEL", "info"); env_logger::init_from_env("MY_LOG_LEVEL"); info!("hi"); } : INFO 2018-02-18T09:59:20Z:操场:嗨 我想使用不同的格式(%Y-%m-%d%H:%

下面是一个简单的例子

#[macro_use]
extern crate log;
extern crate env_logger;

fn main() {
    std::env::set_var("MY_LOG_LEVEL", "info");
    env_logger::init_from_env("MY_LOG_LEVEL");
    info!("hi");
}
:

INFO 2018-02-18T09:59:20Z:操场:嗨
我想使用不同的格式(
%Y-%m-%d%H:%m:%S%.3f“
):

INFO 2018-02-18 09:59:20.123:操场:嗨

我如何才能做到这一点?

这在目前是不可能的

虽然可以使用更改日志消息的格式,但此格式化程序将日志消息的时间戳作为一个标记提供给您<代码>时间戳只实现
调试
显示
,没有额外的方法。文档中没有提到配置日期显示方式的方法。它只提到类表示“格式化的时间戳”。此RFC定义了显示日期的方式。您想要的格式与RFC不兼容(最重要的是,它缺少时区,请不要在没有时区的情况下记录日期时间)

RFC允许比板条箱当前使用的精度更高。此功能已在最近一次名为的拉取请求中删除。在我看来,精度更高有时是有用的,您可以打开一个问题来请求
时间戳
以允许该选项。RFC也不允许省略日期和时间之间的
T

查看这两个特性(和)的实现情况表明,表示形式确实是固定的



1:好吧,你可以忽略
env_logger
中的日期,如果你真的想的话,你可以自己选择。我不确定这会有多糟糕。

这在Rust 1.45.2中是可能的:

使用chrono::Local;
使用env_logger::Builder;
使用log::LevelFilter;
使用std::io::Write;
fn main(){
生成器::new()
.格式(| buf,record |{
写吧(
缓冲器,
"{} {}: {}",
record.level(),

//格式如您所愿:我想知道精度格式修饰符(
Format!(“{.3}”,time)
)在这种情况下,可以选择更高的精度,或者如果这太奇怪的话……这似乎已经被另一个答案覆盖了:好吧,你可以忽略来自env_logger的数据,如果你真的想得到你自己的数据。在稳定通道1.45.2上测试-这不是重要的信息。更有用的是w您正在使用的环境记录器的hat版本。