1 个不稳定版本

0.1.0 2023年8月14日

644HTTP服务器

Download history 13/week @ 2024-04-08 43/week @ 2024-04-22 80/week @ 2024-05-06 12/week @ 2024-05-13 27/week @ 2024-05-20 24/week @ 2024-05-27 89/week @ 2024-06-03 14/week @ 2024-06-10 24/week @ 2024-06-17 57/week @ 2024-06-24 12/week @ 2024-07-01 33/week @ 2024-07-08 22/week @ 2024-07-15 31/week @ 2024-07-22

每月 99 次下载

MIT/Apache

46KB
825

actix-contrib-logger

Actix Web框架提供的日志中间件。

实际上,它是从官方的Logger中间件中复制和粘贴的(原始源代码),但它允许根据HTTP状态码响应选择日志级别,默认情况下,服务器错误以ERROR级别记录。(请参阅Logger::custom_level()Logger::custom_error_resp_level())。

此外,响应日志中的错误也可以配置,默认情况下在服务器端失败时以ERROR级别记录。

Logger中间件使用标准log crate来记录信息。您需要为http_logger启用日志记录才能看到访问日志(env_logger或类似)。

示例

在下面的示例中,使用ERROR级别记录服务器错误,使用WARN级别记录HTTP 404响应(未找到),其余则使用INFO级别。

use actix_contrib_logger::middleware::Logger;
use env_logger::Env;
use http::StatusCode;
use log::Level;

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    use actix_web::{App, HttpServer};

    env_logger::init_from_env(Env::default().default_filter_or("info"));

    HttpServer::new(|| {
        let logger = Logger::default()
            .custom_level(|status| {
                if status.is_server_error() {
                    Level::Error
                } else if status == StatusCode::NOT_FOUND {
                    Level::Warn
                } else {
                    Level::Info
                }
            });
        App::new().wrap(logger)
    })
        .bind(("127.0.0.1", 8080))?
        .run()
        .await
}

请求日志将如下所示:

[2023-08-13T07:28:00Z INFO  http_logger] 127.0.0.1 "GET / HTTP/1.1" 200 802 "-" "Mozilla/5.0 ..." 0.001985
[2023-08-13T07:29:10Z ERROR http_logger] 127.0.0.1 "POST /users HTTP/1.1" 500 86 "-" "curl/7.68.0" 0.002023
[2023-08-13T07:29:10Z WARN  http_logger] 127.0.0.1 "PUT /users HTTP/1.1" 404 55 "-" "HTTPie/3.2.1" 0.002023

使用方法 logger.custom_error_resp_level() 可以配置响应中的错误日志级别,否则默认与原始的logger相同,所有日志都打印在 DEBUG 级别,除了服务器错误,服务器错误以 ERROR 级别打印。日志还包括HTTP状态信息(原始logger不包括)。例如:

[2023-08-13T20:59:53Z ERROR http_logger] Error in "500 Internal Server Error" response: DB(PoolTimedOut)

关于

项目主页: https://github.com/mrsarm/rust-actix-contrib-logger.

作者

  • 原始作者:Actix项目创建了原始的 logger 模块。
  • 本项目修改:Mariano Ruiz (mrsarm at gmail.com)。

许可证

本项目可选择以下任一许可证进行授权:

依赖

~17–28MB
~509K SLoC