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格式日志

相关推荐
九年义务漏网鲨鱼3 小时前
【大模型学习 | MINIGPT-4原理】
人工智能·深度学习·学习·语言模型·多模态
jz_ddk3 小时前
[学习] C语言数学库函数背后的故事:`double erf(double x)`
c语言·开发语言·学习
萧曵 丶3 小时前
Rust 所有权系统:深入浅出指南
开发语言·后端·rust
爱莉希雅&&&5 小时前
技术面试题,HR面试题
开发语言·学习·面试
GetcharZp6 小时前
彻底告别数据焦虑!这款开源神器 RustDesk,让你自建一个比向日葵、ToDesk 更安全的远程桌面
后端·rust
Chef_Chen6 小时前
从0开始学习计算机视觉--Day08--卷积神经网络
学习·计算机视觉·cnn
weixin_446260856 小时前
Isaac Lab:让机器人学习更简单的开源框架
学习·机器人
solohoho7 小时前
Rust:结构体、方法生命周期标注核心要义
rust
我真不会起名字啊8 小时前
OpenSceneGraph(OSG)开发学习
学习
永日456708 小时前
学习日记-spring-day42-7.7
java·学习·spring