You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust中用log4rs实现控制台日志带颜色、文件日志无颜色

解决方案:log4rs实现控制台彩色日志+文件无颜色日志

完全可行,你只需要给控制台和文件的日志编码器分别配置颜色开关即可。log4rs的PatternEncoder支持通过构建器单独设置是否启用ANSI颜色,具体修改如下:

  1. 文件日志编码器:保持原有配置,默认不启用颜色,不会输出转义码。
  2. 控制台日志编码器:使用PatternEncoder::builder()替代直接PatternEncoder::new(),通过.with_color(true)开启颜色支持。

修改后的完整代码:

pub fn init() -> Result<(), Box<dyn std::error::Error>> {
    let pattern = "[{d(%Y-%m-%d %H:%M:%S)}][{T:<12.12}][{l:<5.5}] {m}\n";

    // 文件日志:编码器默认无颜色
    let logfile = RollingFileAppender::builder()
        .encoder(Box::new(PatternEncoder::new(pattern)))
        .build(
            "logs/output.log",
            Box::new(CompoundPolicy::new(
                Box::new(SizeTrigger::new(1024 * 1024 * 10)),
                Box::new(FixedWindowRoller::builder()
                    .build("log/output.log.{}", 10)
                    .unwrap()),
            )),
        )?;

    // 控制台日志:编码器开启颜色
    let stdout_encoder = PatternEncoder::builder()
        .with_color(true)
        .build(pattern)?;
    let stdout = ConsoleAppender::builder()
        .encoder(Box::new(stdout_encoder))
        .build();

    let config = Config::builder()
        .appender(Appender::builder().build("stdout", Box::new(stdout)))
        .appender(Appender::builder().build("logfile", Box::new(logfile)))
        .build(
            Root::builder()
                .appender("logfile")
                .appender("stdout")
                .build(LevelFilter::Info),
        )?;

    log4rs::init_config(config)?;

    Ok(())
}

关键修改说明

  • 控制台部分新增了PatternEncoder的构建流程,显式开启颜色支持;
  • 文件部分的编码器保持默认行为,不输出ANSI转义码;
  • 注意PatternEncoder::builder().build()会返回Result,需要用?处理错误。

内容的提问来源于stack exchange,提问作者chimericdream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 06:07:43