Я пробовал все, и я не могу сохранить журнал «информация» в prod.log или что-то еще, кроме dev.log. Ошибки корректно сохраняются в prod.log.
Что-то не так с этим кодом? Я использую новейшую версию symfony и monolog.
монолог.yaml:
when@prod:
monolog:
handlers:
main:
type: fingers_crossed
action_level: warning
handler: nested
excluded_http_codes: [404, 405]
buffer_size: 50 # How many messages should be saved? Prevent memory leaks
nested:
type: stream
path: '%kernel.logs_dir%/%kernel.environment%.log'
level: debug
formatter: monolog.formatter.json
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
и вот мой контроллер:
#[Route('/test', name: 'app_test')]
public function index(LoggerInterface $logger): Response
{
$logger->info('test');
return $this->render('test/index.html.twig', [
]);
}
я пытался добавить
deprecation:
type: stream
level: info
channels: [php]
path: '%kernel.logs_dir%/deprecated.log'
но это не помогает
Этот основной обработчик типа finger_crossed, вероятно, фильтрует сообщения.
Скрещенные пальцы будут буферизовать журналы из обработчика, который он обертывает.
И только когда его уровень срабатывания будет достигнут, он очистит свой буфер.
См. handler: nested
, что означает, что он обертывает вложенный обработчик.
И уровень срабатывания основного обработчика установлен на action_level: warning
.
Таким образом, ваш вложенный обработчик регистрирует все, что выше уровня отладки журнала. Но основной обработчик упаковывает его, и он будет очищать буфер только после того, как появится сообщение журнала с предупреждением и выше.
В вашем контроллере есть только логи информации об уровне. Это означает, что уровень срабатывания не был достигнут, и буфер не был очищен.
Либо понизьте action_level в основном обработчике, либо инициируйте ведение журнала, создав журнал как минимум уровня предупреждения.
Спасибо - @Waaghals за подсказку. Я сделал это :)
Поверх файла monolog.yaml есть крошечный вспомогательный комментарий:
monolog:
channels:
- deprecation # Deprecations are logged in the dedicated "deprecation" channel when it exists
После его реализации:
deprecation:
type: stream
level: info
channels: ["!event"]
path: '%kernel.logs_dir%/info.log'
Он регистрирует все, что равно или выше уровня «информации» в производстве, в «info.log».