[−][src]Struct actix_web::middleware::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
Variable | Description |
---|---|
%% | The percent sign |
%a | Peer IP address (or IP address of reverse proxy if used) |
%t | Time when the request started processing (in RFC 3339 format) |
%r | First line of request (Example: GET /test HTTP/1.1 ) |
%s | Response status code |
%b | Size of response in bytes, including HTTP headers |
%T | Time taken to serve the request, in seconds to 6 decimal places |
%D | Time taken to serve the request, in milliseconds |
%U | Request URL |
%{r}a | "Real IP" remote address * |
%{FOO}i | request.headers["FOO"] |
%{FOO}o | response.headers["FOO"] |
%{FOO}e | env_var["FOO"] |
%{FOO}xi | Custom 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]
self,
label: &str,
f: impl Fn(&ServiceRequest) -> String + 'static
) -> Self
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]
S: Service<ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
B: MessageBody,
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.
pub fn new_transform(&self, service: S) -> Self::Future
[src]
pub fn map_init_err<F, E>(self, f: F) -> TransformMapInitErr<Self, S, Req, F, E> where
F: Fn(Self::InitError) -> E + Clone,
[src]
F: Fn(Self::InitError) -> E + Clone,
Auto Trait Implementations
impl !RefUnwindSafe for Logger
[src]
impl !Send for Logger
[src]
impl !Sync for Logger
[src]
impl Unpin for Logger
[src]
impl !UnwindSafe for Logger
[src]
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T> Instrument for T
[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T> Instrument for T
[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
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]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,