[−][src]Struct actix_web::middleware::Logger
Middleware
for logging request and response info to the terminal.
Logger
middleware uses standard log crate to log information. You should
enable logger for actix_web
package to see access log.
(env_logger
or similar)
Usage
Create Logger
middleware with the specified format
.
Default Logger
could be created with default
method, it uses the
default format:
%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
use actix_web::middleware::Logger; use actix_web::App; fn main() { std::env::set_var("RUST_LOG", "actix_web=info"); env_logger::init(); let app = App::new() .wrap(Logger::default()) .wrap(Logger::new("%a %{User-Agent}i")); }
Format
%%
The percent sign
%a
Remote IP-address (IP-address of proxy if using reverse proxy)
%t
Time when the request was started to process (in rfc3339 format)
%r
First line of request
%s
Response status code
%b
Size of response in bytes, including HTTP headers
%T
Time taken to serve the request, in seconds with floating fraction in
.06f format
%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
os.environ['FOO']
Security
* It is calculated using
ConnectionInfo::realip_remote_addr()
If you use this value ensure that all requests come from trusted hosts, since it is trivial for the remote client to simulate being another client.
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.
Trait Implementations
impl Default for Logger
[src]
fn default() -> Logger
[src]
Create Logger
middleware with format:
%a "%r" %s %b "%{Referer}i" "%{User-Agent}i" %T
impl<S, B> Transform<S> for Logger where
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
B: MessageBody,
[src]
S: Service<Request = ServiceRequest, Response = ServiceResponse<B>, Error = Error>,
B: MessageBody,
type Request = ServiceRequest
Requests handled by the service.
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.
fn new_transform(&self, service: S) -> Self::Future
[src]
fn map_init_err<F, E>(self, f: F) -> TransformMapInitErr<Self, S, F, E> where
F: Fn(Self::InitError) -> E + Clone,
[src]
F: Fn(Self::InitError) -> E + Clone,
Auto Trait Implementations
impl !RefUnwindSafe for Logger
impl !Send for Logger
impl !Sync for Logger
impl Unpin for Logger
impl UnwindSafe for Logger
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,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T> Instrument for T
[src]
fn instrument(self, span: Span) -> Instrumented<Self>
[src]
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.
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.
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>,