pieceofcake2 / monolog
CakePHP 2 Monolog Plugin
Installs: 0
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 15
Type:cakephp-plugin
pkg:composer/pieceofcake2/monolog
Requires
- php: ^8.0
- composer/installers: *
- monolog/monolog: ^2.5|^3.9
- pieceofcake2/cakephp: ^2.10
Requires (Dev)
- cakephp/cakephp-codesniffer: ^5.0
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.6
- pieceofcake2/app: ^2.1
- pieceofcake2/phpstan-cakephp2: ^0.2.1
Replaces
README
This is forked for CakePHP2.
Despite the very advanced logging system offered in CakePHP, I still would have had to write a lot more code to be able to handle logs the way I needed. To write the least code possible, I chose to go with the popular monolog library.
Note
The package name changed to jadb/cakephp-monolog, to not violate the cakephp namespace.
Install
Because monolog is a composer package and to avoid having to manually write a lot of includes (vs. auto-loading), I decided to release this also as a composer package and take advantage of the auto-loading magic.
composer require pieceofcake2/monolog
That's it! You should now be ready to start configuring your channels.
Configuration
Start by creating a logging configuration file (i.e. app/Config/log.php
) that you will include early
in your app/Config/bootstrap.php
:
require_once CONFIG . 'log.php';
A basic configuration, to replicate what Cake does but using Monolog (to give you a good starting example), would look something like this:
CakePlugin::load('Monolog'); CakeLog::config('debug', [ 'engine' => 'Monolog.Monolog', 'channel' => 'app', 'handlers' => [ 'Stream' => [ LOGS . 'debug.log', 'formatters' => [ 'Line' => ["%datetime% %channel% %level_name%: %message%\n"], ], ], ], ]);
Note that with CakePHP versions < 2.4 the engine name should instead be Monolog.MonologLog
.
Simple, no? But let's really do some serious logging, otherwise why bother moving away from the default CakePHP logging system?
The example below shows how to setup:
- rotating logs that are kept from 30 days and readable by logstash with memory peak usage info
- normal log file with much more details about the request
- email notifications for critical and alert levels including only the error message
CakeLog::config('logstash', [ 'engine' => 'Monolog.Monolog', 'channel' => 'app', 'handlers' => [ 'RotatingFile' => [ LOGS . 'logstash.log', 30, 'formatters' => [ 'Logstash' => ['web', env('SERVER_ADDR')] ], 'processors' => ['MemoryPeakUsage'], ], 'Stream' => [ LOGS . 'logstash.log', 'formatters' => [ 'Line' => ["%datetime% %channel% %level_name%: %message% %context% %extra%\n"] ], 'processors' => ['MemoryUsage', 'Web'], ], 'CakeEmail' => [ 'admin@domain.com', 'ALERT: APPLICATION REQUIRES IMMEDIATE ATTENTION.', 'default', ], ], ]);
The CakeEmailHandler
was just submitted to the main monolog repo today. If it is not
merged by the time you are reading this, just use my fork.