Изменить формат журнала во время выполнения, используя Monolog и Laravel
Мне нужно написать customlog на laravel 5.3 и изменить во время выполнения для добавления дополнительной информации.
Пока мне удалось это сделать, но код не работает, потому что я могу добавить новый экземпляр журнала, который дублирует строки в каждой модификации формата.
Мой недостаток в том, что я не знаю, как вернуть или, если это возможно, текущий обработчик системы регистрации и просто передать ему модификацию формата.
Код ниже позволяет мне изменять формат строки, но только один раз.
Если я запустлю его снова, начните дублировать строки, а что не так, создайте обработчик другим способом или используйте существующий, который будет подходящим.
$maxFiles = config('app.log_max_files');
$path = storage_path('/logs/cprsync.log');
// Really I don't need this because this are on Laravel App, but with this method y can create a $handler for modify format
$handler = new RotatingFileHandler($path, is_null($maxFiles) ? 5 : $maxFiles, config('app.log_level'));
(is_null(config('cprsync.activejob'))) ? $job = '' : $job=' ['.config('cprsync.activejob').']';
$logFormat = "[%datetime%] [%level_name%]".$job.": %message% %context% %extra%\n";
$formatter = new LineFormatter($logFormat,null,true,true);
$handler->setFormatter($formatter); // What I really want is to make this change ...
// Push handler
$log->getMonolog()->pushHandler($handler);
1 ответ
Я не знаю, является ли он самым красивым (как в Symfony, вы можете просто поместить некоторые правила YAML в services.yml, и вы изменили формат вашего журнала), но это, кажется, очень правильный вариант и в основном основывается на том, что вы делаю уже:
http://laravel-tricks.com/tricks/monolog-for-custom-logging
TL; DR: создать пользовательский класс ведения журнала с помощью функции write()
который в основном содержит код, опубликованный OP. Затем добавьте этот класс на ваши фасады, и вы можете войти с MyCustomLogger::write($message);
РЕДАКТИРОВАТЬ: Это не совсем то, что запрашивал OP, так как это не меняет формат во время выполнения.