Rust中用log4rs实现控制台日志带颜色、文件日志无颜色
解决方案:log4rs实现控制台彩色日志+文件无颜色日志
完全可行,你只需要给控制台和文件的日志编码器分别配置颜色开关即可。log4rs的PatternEncoder支持通过构建器单独设置是否启用ANSI颜色,具体修改如下:
- 文件日志编码器:保持原有配置,默认不启用颜色,不会输出转义码。
- 控制台日志编码器:使用
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
相关产品推荐
相关产品推荐

