rust库学习-env_logger(actix-web添加彩色日志、rust添加彩色日志 )

文章目录

我们在进行rust的web开发时,如果不指定日志,就不会有输出,非常不友好

这里我们使用env_logger进行日志打印

介绍

env_logger 需要配合 log 库使用,

env_logger 是 Rust 社区中一个非常流行的日志记录库。它提供了一个简单且易于使用的接口,用于配置和记录日志消息。env_logger 可以与 Rust 标准库中的 配合使用log cratelog crate 是 Rust 中的一个日志抽象库,类似于 Java 中的 SLF4J(笔者感觉类似于这样的门面模式,因为我们只需要更换依赖即可修改log的具体实现,达到动态切换日志库的目的)。

log crate 提供了一个通用的日志接口,允许开发者在代码中记录日志消息。它定义了几个日志级别(如 ErrorWarnInfoDebugTrace),以及日志记录方法(如 error!warn!info!debug!trace!)。log crate 的接口非常简单,允许开发者在代码中使用类似这样的宏log::info!记录日志。

env_logger 则是一个基于 log crate 的实现,它提供了一个具体的日志记录器,并通过环境变量来配置日志的输出级别和格式。你可以在代码中使用 log crate 的宏记录日志,然后通过使用 env_logger配置日志级别和格式,并将日志输出到控制台或文件中。

env_logger 还支持动态切换日志库。你可以在项目的依赖中同时包括 env_logger 和其他的日志库,然后通过设置环境变量来选择要使用的日志库。这样,你可以根据不同的需求和环境,灵活地切换日志库,而无需修改代码。

actix-web启用彩色日志

废话不多说,直接给各位爷上代码

toml

toml 复制代码
[dependencies]
log = "0.4.0"
env_logger = "0.9.0"

代码

rust 复制代码
use chrono::Local;
use std::io::Write;
use std::{env, io};
use std::sync::Mutex;
use std::time::Duration;
use log::info;

use actix_web::{App, HttpServer, middleware, web};


#[actix_rt::main]
async fn main() -> io::Result<()> {
    // 初始化日志
    init_logger();
    let app = move || {
        App::new()
        	// 设置中间件,让actix-web打印日志
            .wrap(middleware::Logger::default())
    };
    HttpServer::new(app).bind("127.0.0.1:3000")?.run().await
}

fn init_logger() {
    use env_logger::fmt::Color;
    use env_logger::Env;
    use log::LevelFilter;

    let env = Env::default().filter_or("MY_LOG_LEVEL", "debug");
    // 设置日志打印格式
    env_logger::Builder::from_env(env)
        .format(|buf, record| {
            let level_color = match record.level() {
                log::Level::Error => Color::Red,
                log::Level::Warn => Color::Yellow,
                log::Level::Info => Color::Green,
                log::Level::Debug | log::Level::Trace => Color::Cyan,
            };

            let mut level_style = buf.style();
            level_style.set_color(level_color).set_bold(true);

            let mut style = buf.style();
            style.set_color(Color::White).set_dimmed(true);

            writeln!(
                buf,
                "{} {} [ {} ] {}",
                Local::now().format("%Y-%m-%d %H:%M:%S"),
                level_style.value(record.level()),
                style.value(record.module_path().unwrap_or("<unnamed>")),
                record.args()
            )
        })
        .filter(None, LevelFilter::Debug)
        .init();
    info!("env_logger initialized.");
}

效果

crate地址&json格式日志

相关推荐
xiaotao1314 小时前
02-机器学习基础: 监督学习——线性回归
学习·机器学习·线性回归
墨黎芜5 小时前
ArcGIS从入门到精通——地图符号、注记的初步使用
学习·arcgis·信息可视化
小李云雾5 小时前
FastAPI重要知识点---中间件(Middleware)
学习·程序人生·中间件·fastapi·middleware
小夏子_riotous5 小时前
Docker学习路径——3、常用命令
linux·运维·服务器·学习·docker·容器·centos
STLearner6 小时前
WSDM 2026 | 时间序列(Time Series)论文总结【预测,表示学习,因果】
大数据·论文阅读·人工智能·深度学习·学习·机器学习·数据挖掘
redaijufeng6 小时前
网络爬虫学习:应用selenium获取Edge浏览器版本号,自动下载对应版本msedgedriver,确保Edge浏览器顺利打开。
爬虫·学习·selenium
腾科IT教育6 小时前
零基础快速上岸HCIP,高效学习思路分享
学习·华为认证·hcip·hcip考试·hcip认证
23471021276 小时前
4.14 学习笔记
笔记·python·学习
醇氧6 小时前
【学习】软件过程模型全解析:从瀑布到敏捷的演进之路
学习·log4j
邪修king6 小时前
UE5 零基础入门第三弹: 碰撞与触发交互,解锁场景机关与蓝图封装(高娱乐性学习)
学习·ue5·交互