m6web / log-bridge-bundle
SF2 Proxy manager Log
Installs: 334 405
Dependents: 0
Suggesters: 0
Security: 0
Stars: 19
Watchers: 46
Forks: 5
Open Issues: 8
Type:symfony-bundle
Requires
- php: >=8.0
- symfony/config: ^4.4|^5.0|^6.0
- symfony/dependency-injection: ^4.4|^5.0|^6.0
- symfony/expression-language: ^4.4|^5.0|^6.0
- symfony/http-kernel: ^4.4|^5.0|^6.0
- symfony/routing: ^4.4|^5.0|^6.0
- symfony/security-core: ^4.4|^5.0|^6.0
- symfony/yaml: ^4.4|^5.0|^6.0
Requires (Dev)
- atoum/atoum: ^3.4|^4.0
- m6web/php-cs-fixer-config: ^2.1
- phpstan/phpstan: ^1.7
- rector/rector: ^0.13.2
- symfony/http-foundation: ^4.4|^5.0|^6.0
- v10.2.0
- v10.1.0
- v10.0.1
- v10.0.0
- v9.0.1
- v9.0.0
- v8.0.1
- v8.0.0
- v7.0.2
- v7.0.1
- v7.0.0
- v6.x-dev
- v6.1.0
- v6.0.2
- v6.0.1
- v6.0.0
- v5.0.0
- v4.3.4
- v4.3.3
- v4.3.2
- v4.3.1
- v4.3.0
- v4.2.2
- v4.2.1
- v4.2.0
- v4.1.1
- v4.1.0
- v4.0.1
- v4.0.0
- v3.0.1
- v3.0.0
- v2.2.1
- v2.2.0
- v2.1.6
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.0
- v1.1.0
- dev-master / 1.0.x-dev
- v1.0.5
- 1.0.4
- v1.0.3
- v1.0.1
- v1.0.0
- dev-feat/no-router
This package is auto-updated.
Last update: 2024-12-07 13:03:05 UTC
README
Symfony Bundle to log Request/Response with Monolog.
NOTE: The actual version of this bundle support Symfony >= 4.4
.
If you need support for older versions, please use ~7.0
release.
Features
- semantic configuration
- sf2 event dispatcher integration
- log request filter
Install
With composer
"require": {
"m6web/log-bridge-bundle": "~3.0"
}
Add to your AppKernel
$bundles = [
// ...
new M6Web\Bundle\LogBridgeBundle\M6WebLogBridgeBundle(),
//...
];
Usage
# app/config.yml m6_web_log_bridge: active_filters: - get_article_error - post_article_all - all_error filters: get_article_error: route: get_article routes: ['get_article'] method: ['GET'] status: [422, 500] level: 'error' options: response_body: true # from add Response body content (with DefaultFormatter) post_article_all: route: post_article routes: ['post_article'] method: ~ # from all methods status: ~ # from all status get_article_not_found: route: get_article routes: ['get_article'] method: ['GET'] status: [404] level: 'warning' edit_category: route: get_category routes: ['get_category'] method: ['POST', 'PUT'] status: [400-422, ^510, !530-550] level: 'error' options: post_parameters: true # From add post parameters in response content (with DefaultFormatter) all_error: # All route, all method in error route: ~ routes: ~ method: ~ status: [31*, 4*, 5*] level: 'critical' content_formatter: m6web_log_bridge.log_content_formatter # Provider service name ignore_headers: # key list from mask/ignore header info - php-auth-pw prefix_key: ~ # define prefix key on log context logger: channel: my_channel_to_log # monolog channel, optional, default 'log_bridge'
Routes support multiples formats :
routes: ['my_route'] # Add only this route routes: ['my_route', 'another_route'] # Add multiples routes routes: ['!excluded_one', '!excluded_two'] # Add all routes except the excluded
By default, level
is info
You can declare all the options you want.
By default, only response_body
and post_parameters
is supported by the DefaultFormatter
Status support multiples formats :
status: [401] # Add status 401 status: [^456] # Add status hundred greater than 450 (456, 457, 458, ..., 499) status: [4*] # Add status hundred (200, 400, 401, 402, ..., 499) status: [41*] # Add status decade (410, 411, 412, ..., 419) status: [425-440] # Add range status (425, 426, 427, ..., 440) status: [2*, 301, !203-210] # Add status (200, 201, 202, 211, ..., 299, 301)
Instead of add can be use !
to exclude status
By default, this bundle use a builtin logger with monolog support m6web_log_bridge.logger
You can override this configuration by writing your own logger who must implements Psr\Log\LoggerInterface
:
# app/config.yml m6_web_log_bridge: logger: service: acme.logger
services: acme.logger: class: Acme\DemoBundle\Logger\logger arguments: ["@logger"] tags: - { name: monolog.logger, channel: log_bridge }
Acme\DemoBundle\Logger\logger
must be implement Psr\Log\LoggerInterface
Define your Provider from format log content
It is advisable to extend default provider M6Web\Bundle\LogBridgeBundle\Formatter\DefaultFormatter
default definition from service provider :
services:
m6web_log_bridge.log_content_provider:
class: '%m6web_log_bridge.log_content_provider.class%'
arguments:
- '%kernel.environment%'
- '%m6web_log_bridge.ignore_headers%'
- '%m6web_log_bridge.prefix_key%'
calls:
- [ setTokenStorage, [ '@security.token_storage' ] ]
From override :
services:
acme.my_log_provider:
class: Acme\Bundle\MyBundle\Provider\LogContentProvider
parent: m6web_log_bridge.log_content_formatter
or simply override this parameter : m6web_log_bridge.log_content_formatter.class
Log contents example
Request
------------------------
content-type :
content-length :
host : domain.tld
x-real-ip : *********
x-forwarded-for : *********
x-forwarded-proto : http
x-forwarded-port : 80
remote-user : u_glinel
connection : close
cache-control : max-age=0
authorization : Basic ************
accept : text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
user-agent : Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/127.0.0.1 Chrome/127.0.0.1 Safari/537.36
accept-encoding : gzip,deflate,sdch
accept-language : fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
cookie : PHPSESSID=************
php-auth-user : u_glinel
x-php-ob-level : 1
------------------------
Response
------------------------
HTTP 1.0 200
Age: 2
Etag:
Vary:
Cache-Control: no-cache
Content-Type: application/json
Date: dd mm yyyy hh:ii:ss GMT
------------------------
Response body
------------------------
Here response content
Logging exceptions
The bundle allow detailed logging of exceptions. This is ensured by the use of exception.log
in the configuration.
# app/config.yml m6_web_log_bridge: exception: log: true request_attribute: LogBridgeException
This switch allows the bundle to register a listener which will save any received exception and passed it within the request under the defined attribute.
If you use the default formatter, change it using the configuration. The bundle provides another formatter implementation able to log exceptions.
# app/config.yml m6_web_log_bridge: content_formatter: m6web_log_bridge.log_content_exception_formatter
If you prefer to use your own formatter, you will be able to read exceptions directly from the request under the attribute specified in m6_web_log_bridge.exception.request_attribute
.
Tests
You can run the unit tests with the following command:
php bin/atoum -d src/M6Web/Bundle/LogBridgeBundle/Tests/Units