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

相关推荐
new coder2 分钟前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
星域智链23 分钟前
宠物智能用品:当毛孩子遇上 AI,是便利还是过度?
人工智能·科技·学习·宠物
呱呱巨基41 分钟前
vim编辑器
linux·笔记·学习·编辑器·vim
"菠萝"1 小时前
C#知识学习-017(修饰符_6)
学习·c#
早睡冠军候选人1 小时前
Ansible学习----Ansible Playbook
运维·服务器·学习·云原生·容器·ansible
楼田莉子2 小时前
C++学习:C++11扩展:constexpr特性
开发语言·c++·学习
懒羊羊不懒@2 小时前
Java基础语法—最小单位、及注释
java·c语言·开发语言·数据结构·学习·算法
qq_398586542 小时前
Threejs入门学习笔记
javascript·笔记·学习
菜鸟‍4 小时前
【论文学习】大语言模型(LLM)论文
论文阅读·人工智能·学习
我先去打把游戏先4 小时前
ESP32学习笔记(基于IDF):IOT应用——WIFI连接
笔记·单片机·嵌入式硬件·mcu·物联网·学习·esp32