[][src]Struct actix_web::middleware::Logger

pub struct Logger(_);

Middleware for logging request and response summaries to the terminal.

This middleware uses the log crate to output information. Enable log's output for the "actix_web" scope using env_logger or similar crate.

Default Format

The default Logger uses the following format:

%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T

Example Output:
127.0.0.1:54278 "GET /test HTTP/1.1" 404 20 "-" "HTTPie/2.2.0" 0.001074

Usage

use actix_web::{middleware::Logger, App};

// access logs are printed with the INFO level so ensure it is enabled by default
env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));

let app = App::new()
    // .wrap(Logger::default())
    .wrap(Logger::new("%a %{User-Agent}i"));

Format

VariableDescription
%%The percent sign
%aPeer IP address (or IP address of reverse proxy if used)
%tTime when the request started processing (in RFC 3339 format)
%rFirst line of request (Example: GET /test HTTP/1.1)
%sResponse status code
%bSize of response in bytes, including HTTP headers
%TTime taken to serve the request, in seconds to 6 decimal places
%DTime taken to serve the request, in milliseconds
%URequest URL
%{r}a"Real IP" remote address *
%{FOO}irequest.headers["FOO"]
%{FOO}oresponse.headers["FOO"]
%{FOO}eenv_var["FOO"]
%{FOO}xiCustom request replacement labelled "FOO"

Security

* "Real IP" remote address is calculated using ConnectionInfo::realip_remote_addr()

If you use this value, ensure that all requests come from trusted hosts. Otherwise, it is trivial for the remote client to falsify their source IP address.

Implementations

impl Logger[src]

pub fn new(format: &str) -> Logger[src]

Create Logger middleware with the specified format.

pub fn exclude<T: Into<String>>(self, path: T) -> Self[src]

Ignore and do not log access info for specified path.

pub fn exclude_regex<T: Into<String>>(self, path: T) -> Self[src]

Ignore and do not log access info for paths that match regex.

pub fn custom_request_replace(
    self,
    label: &str,
    f: impl Fn(&ServiceRequest) -> String + 'static
) -> Self
[src]

Register a function that receives a ServiceRequest and returns a String for use in the log line. The label passed as the first argument should match a replacement substring in the logger format like %{label}xi.

It is convention to print "-" to indicate no output instead of an empty string.

Example

Logger::new("example %{JWT_ID}xi")
    .custom_request_replace("JWT_ID", |req| parse_jwt_id(req.headers().get("Authorization")));

Trait Implementations

impl Debug for Logger[src]

impl Default for Logger[src]

pub fn default() -> Logger[src]

Create Logger middleware with format:

%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T

impl<S, B> Transform<S, ServiceRequest> for Logger where
    S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
    B: MessageBody
[src]

type Response = ServiceResponse<StreamLog<B>>

Responses given by the service.

type Error = Error

Errors produced by the service.

type InitError = ()

Errors produced while building a transform service.

type Transform = LoggerMiddleware<S>

The TransformService value created by this factory

type Future = Ready<Result<Self::Transform, Self::InitError>>

The future response value.

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,