Symfony2/Monolog: Log Level - показывать только app.INFO?
Я использую Symfony2 и monolog для записи в определенных журналах в определенный файл журнала (mylogfile.log):
#config_dev.yml
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
file:
type: stream
path: %kernel.logs_dir%/mylogfile.log
level: info
Я получаю доступ к лог-файлу в моем контроллере через:
$logger = $this->get('logger'); // Log
$logger->info('somelogcontent');
Теперь моя проблема заключается в том, что мой файл журнала содержит весь информационный уровень, то есть он дает мне все журналы app.INFO (что мне и нужно) и request.INFO (который мне на самом деле не нужен):
[2012-04-04 11:13:17] request.INFO: Matched route ... blablabla
[2012-04-04 11:13:17] app.INFO: somelogcontent
...
Есть ли способ не войти в журнал Request.INFO?
Майк
4 ответа
Вы должны сделать новый сервис регистрации, который должен использоваться в ваших классах. Вот так, config.yml:
services:
my_logger:
class: Monolog\Logger
arguments: [my_info]
calls:
- [pushHandler, [@my_log_handler]]
my_log_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.root_dir%/logs/my_info.log, 100]
Использование (в Controller
, например):
$this->get('my_logger')->info('info message');
Более подробная информация в кулинарной книге Symfony.
С версией 2.4 и выше (будьте осторожны, цикл выпуска MonologBundle больше не синхронизируется с Symfony) MonologBundle, теперь вы можете определять новые каналы очень просто с помощью конфигурации, без определения служб.
monolog:
channels: ["my_channel"]
handlers:
file:
type: stream
path: %kernel.logs_dir%/mylogfile.log
level: info
channels: my_channel
Теперь просто получите автоматически созданный регистратор для нового канала в вашем контроллере:
$logger = $this->get('monolog.logger.my_channel');
$logger->info('somelogcontent');
Я знаю старый вопрос, но эта новая особенность от MonologBundle
~2.4
следует упомянуть.
Вы можете уровень оповещения пользователя. файл: тип: путь потока: %kernel.logs_dir%/mylogfile.log уровень: предупреждение
$logger = $this->get('logger'); // Log
$logger->alert('somelogcontent');
Это сообщение журнала поступает от службы router_listener. Вы можете переопределить его в файле конфигурации услуг.
Что я сделал в своем основном комплекте config/services.yml:
services:
# ...
router_listener:
class: %router_listener.class%
arguments: ['@router', %request_listener.http_port%, %request_listener.https_port%]
tags:
- { name: kernel.event_listener, event: kernel.request, method: onEarlyKernelRequest }
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
Из-за этого сообщения журнала "Matched route ..." не регистрируются (так как RouterListener не имеет службы ведения журнала в своих аргументах конструктора).
Добавьте в файл config\packages\monolog.yaml специальный канал "app"
monolog:
handlers:
info:
type: rotating_file
path: '%kernel.logs_dir%/info_%kernel.environment%_info.log'
level: info
max_files: 10
channels: app
Я использую Symfony 4 (или 5)
Добавьте в конфигурацию монолога, например, если я использую обработчик:test
test:
type: filter
accepted_levels: [info]
handler: test_info
test_info:
type: stream // many possibilities(rotating_file..)
level: info
path: // the path where you save file log