All Projects → middlewares → access-log

middlewares / access-log

Licence: MIT License
PSR-15 middleware to generate access logs

Programming Languages

PHP
23972 projects - #3 most used programming language

Projects that are alternatives of or similar to access-log

Clevergo
👅 CleverGo is a lightweight, feature rich and high performance HTTP router for Go.
Stars: ✭ 246 (+1071.43%)
Mutual labels:  middleware
request-context
Simple connect middleware for accessing data in a request context.
Stars: ✭ 55 (+161.9%)
Mutual labels:  middleware
falcon-policy
Policy Middleware for Falcon APIs
Stars: ✭ 30 (+42.86%)
Mutual labels:  middleware
Csaguzzlebundle
A bundle integrating Guzzle >=4.0 in Symfony
Stars: ✭ 248 (+1080.95%)
Mutual labels:  middleware
apachelogs
Parse Apache access logs
Stars: ✭ 19 (-9.52%)
Mutual labels:  access-logs
terraform-aws-ecs-web-app
Terraform module that implements a web app on ECS and supports autoscaling, CI/CD, monitoring, ALB integration, and much more.
Stars: ✭ 175 (+733.33%)
Mutual labels:  access-logs
My Review
主要存放平时理论学习,比如java jdk源码分析、并发理论;面试、数据库、Linux、中间件、分布式、网络协议等方向
Stars: ✭ 237 (+1028.57%)
Mutual labels:  middleware
ASPNETcoreAngularJWT
Angular in ASP.NET Core with JWT solution by systemjs
Stars: ✭ 48 (+128.57%)
Mutual labels:  middleware
webreadr
A package for consuming and munging access log data
Stars: ✭ 50 (+138.1%)
Mutual labels:  access-logs
fjage
Framework for Java and Groovy Agents
Stars: ✭ 19 (-9.52%)
Mutual labels:  middleware
Node Sass Middleware
connect middleware extracted from node-sass
Stars: ✭ 247 (+1076.19%)
Mutual labels:  middleware
Imagesharp.web
🌐 High Performance Image Processing Middleware for ASP.NET- Core.
Stars: ✭ 250 (+1090.48%)
Mutual labels:  middleware
use
Easily add plugin support to your node.js application.
Stars: ✭ 25 (+19.05%)
Mutual labels:  middleware
Golf
⛳️ The Golf web framework
Stars: ✭ 248 (+1080.95%)
Mutual labels:  middleware
koa-rest-router
Most powerful, flexible and composable router for building enterprise RESTful APIs easily!
Stars: ✭ 67 (+219.05%)
Mutual labels:  middleware
Express Basic Auth
Plug & play basic auth middleware for express
Stars: ✭ 241 (+1047.62%)
Mutual labels:  middleware
dictator
Dictates what your users see. Plug-based authorization.
Stars: ✭ 77 (+266.67%)
Mutual labels:  middleware
cute
An event-centric publisher/subscribe model for objects inspired by the Qt framework
Stars: ✭ 37 (+76.19%)
Mutual labels:  middleware
node-uploadx
Node.js middleware for handling resumable uploads
Stars: ✭ 17 (-19.05%)
Mutual labels:  middleware
oak-middleware-jwt
Oak middleware for JWT
Stars: ✭ 24 (+14.29%)
Mutual labels:  middleware

middlewares/access-log

Latest Version on Packagist Software License Testing Total Downloads

Middleware to generate access logs for each request using the Apache's access log format. This middleware requires a Psr log implementation, for example monolog.

Requirements

Installation

This package is installable and autoloadable via Composer as middlewares/access-log.

composer require middlewares/access-log

Example

use Monolog\Logger;
use Monolog\Handler\StreamHandler;

//Create the logger
$logger = new Logger('access');
$logger->pushHandler(new StreamHandler(fopen('/access-log.txt', 'r+')));

$dispatcher = new Dispatcher([
    new Middlewares\AccessLog($logger)
]);

$response = $dispatcher->dispatch(new ServerRequest());

Usage

This middleware uses PSR-3 logger standard to store the logs, so you need to pass a Psr\Log\LoggerInterface instance to the constructor.

format

This option allows to define the format used to save the log messages. You can create your own format (More info about the available options) ou use one of the following constants provided with predefined formats:

  • AccessLog::FORMAT_COMMON (Used by default)
  • AccessLog::FORMAT_COMMON_VHOST
  • AccessLog::FORMAT_COMBINED
  • AccessLog::FORMAT_REFERER
  • AccessLog::FORMAT_AGENT
  • AccessLog::FORMAT_VHOST
  • AccessLog::FORMAT_COMMON_DEBIAN
  • AccessLog::FORMAT_COMBINED_DEBIAN
  • AccessLog::FORMAT_VHOST_COMBINED_DEBIAN
use Middlewares\AccessLog;

$format = AccessLog::FORMAT_COMMON_VHOST;

$accessLog = (new AccessLog($logger))->format($format);

ipAttribute

By default uses the REMOTE_ADDR server parameter to get the client ip. This option allows to use a request attribute. Useful to combine with any ip detection middleware, for example client-ip:

Dispatcher::run([
    //detect the client ip and save it in "ip" attribute
    (new Middlewares\ClientIP())->attribute('ip'),

    //use that attribute
    (new Middlewares\AccessLog($logger))->ipAttribute('ip')
]);

hostnameLookups

Enable the hostnameLookups flag used to get the remote hostname (%h). By default is false.

context

By default there is no context passed into the logger. When setting this context callable it will be called each time an request is logged with both the request and response. Letting you set context to the log entry:

$dispatcher = new Dispatcher([
    //detect the client ip and save it in ip attribute
    (new Middlewares\ClientIP())->attribute('ip'),
    
    // Add UUID for the request so we can trace logs later in case somethings goes wrong
    new Middlewares\Uuid(),

    // Use the data from the other two middleware and use it as context for logging
    (new Middlewares\AccessLog($logger))
        ->context(function (ServerRequestInterface $request, ResponseInterface $response) {
            return [
                'request-id' => $request->getHeaderLine('X-Uuid'),
                'client-ip' => $request->getAttribute('ip'),
            ];
        })
]);

Custom format string

The format string tries to mimic the directives described in Apache Httpd server documentation.

A custom format can be defined by placing "%" directives in the format string, which are replaced in the log file by the values as follows:

Format String Description
%% The percent sign.
%a Client IP address of the server request (see the ipAttribute option).
%{c}a Client IP address of the server request (see the ipAttribute option, differs from the original Apache directive behavior).
%A Local IP-address.
%B Size of response in bytes, excluding HTTP headers.
%b Size of response in bytes, excluding HTTP headers. In CLF format, i.e. a - rather than a 0 when no bytes are sent.
%{VARNAME}C The contents of cookie VARNAME in the server request sent to the server.
%D The time taken to serve the request, in microseconds.
%{VARNAME}e The contents of the environment variable VARNAME.
%f Filename.
%h Remote hostname. Will log the IP address if hostnameLookups is set to false, which is the default
%H The request protocol.
%{VARNAME}i The contents of VARNAME: header line(s) in the request sent to the server.
%m The request method.
%{VARNAME}n The contents of attribute VARNAME in the server request (differs from the original Apache directive behavior).
%{VARNAME}o The contents of VARNAME: header line(s) in the reply.
%p The canonical port of the server serving the request.
%{format}p The canonical port of the server serving the request or the string - for remote. Valid formats are canonical, local, or remote (differs from the original Apache directive behavior).
%q The query string (prepended with a ? if a query string exists, otherwise an empty string).
%r First line of request.
%s Status.
%t Time the request was received, in the format [18/Sep/2011:19:18:28 -0400]. The last number indicates the timezone offset from GMT
%{format}t The time, in the form given by format, which should be in an extended strftime(3) format (potentially localized). If the format starts with begin: (default) the time is taken at the beginning of the request processing. If it starts with end: it is the time when the log entry gets written, close to the end of the request processing. In addition to the formats supported by strftime(3), the following format tokens are supported: sec, msec, usec (differs from the original Apache directive behavior).
%T The time taken to serve the request, in seconds.
%{UNIT}T The time taken to serve the request, in a time unit given by UNIT. Valid units are ms for milliseconds, us for microseconds, and s for seconds. Using s gives the same result as %T without any format; using us gives the same result as %D.
%u Remote user if the request was authenticated. May be bogus if return status (%s) is 401 (unauthorized).
%U The URL path requested, not including any query string.
%v The host of the server request (differs from the original Apache directive behavior).
%V The server name that appears in the server param of the request, or the request host if not available (differs from the original Apache directive behavior).
%I Bytes received, including request and headers. Cannot be zero.
%O Bytes sent, including headers.
%S Bytes transferred (received and sent), including request and headers, cannot be zero. This is the combination of %I and %O.

The following Apache Httpd server directives are not implemented in this middleware:

Format String Description
%k Will print the string -.
%l Will print the string -.
%L Will print the string -.
%P Will print the string -.
%{format}P Will print the string -.
%R Will print the string -.
%X Will print the string -.
%{VARNAME}^ti Will print the string -.
%{VARNAME}^to Will print the string -.

Please see CHANGELOG for more information about recent changes and CONTRIBUTING for contributing details.

The MIT License (MIT). Please see LICENSE for more information.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].