Inspired by enlitepro/enlite-monolog and smartapps-fr/yii-monolog
The recommended way to install is through composer from command line.
composer require asuran/yii-monolog
- Add the component to the preload list
<?php
return [
'preload' => [
'monolog',
],
];
- Configure the component
<?php
return [
'components' => [
'monolog' => [
'class' => 'YiiMonolog\MonologComponent',
'name' => 'MyApplication',
'handlers' => [
'file' => [
'class' => 'Monolog\Handler\StreamHandler',
'stream' => '/runtime/app.log',
'formatter' => 'Monolog\Formatter\LineFormatter',
],
static function () {
/** @var StreamHandler $stream */
$stream = Yii::createComponent([
'class' => RotatingFileHandler::class,
],
Yii::app()->runtimePath.'/application.log', 10);
$formatter = Yii::createComponent([
'class' => LineFormatter::class,
]);
$stream->setFormatter($formatter);
return $stream;
}
],
'processors' => [
'Monolog\Processor\ProcessIdProcessor',
],
],
],
];
- Add log route
<?php
return [
'components' => [
'log' => [
'class' => 'CLogRouter',
'routes' => [
'monolog' => [
'class' => 'YiiMonolog\MonologLogRoute',
],
],
],
],
];
- Add exception handler
<?php
return [
'components' => [
'errorHandler' => [
'class' => 'YiiMonolog\MonologErrorHandler',
'errorAction' => 'site/error',
],
],
];
- Use it
<?php
# Using info with variables
Yii::log("A new store user did a self-register on the system", \Monolog\Logger::INFO, [
'id' => $form->usuario->id,
'category' => 'users',
]);
# Using debug with variables
Yii::log("Info about the new store user created", \Monolog\Logger::DEBUG, [
'id' => $form->usuario->id,
'cnpj' => $form->usuario->usu_login,
'email' => $form->usuario->usu_email,
'category' => 'users',
]);
# Using error without variables.
# System will convert the 3th parameter in "category" parameter and store it as an array of variables
# This first example keeps the Yii::log compatible with old logs in your system
Yii::log("File not found", CLogger::LEVEL_ERROR, "command.gearman");
# This another example allows to use all monolog levels for messages
Yii::log("File not found", \Monolog\Logger::ERROR, "command.gearman");