Цель журнала PHP в приложении Symfony на AWS с CloudWatch

У меня есть приложение Symfony, размещенное в Docker на AWS. Для регистрации я использую AWS CloudWatch.

Например: соединение с базой данных не может быть установлено. Если я использую монологическую конфигурацию по умолчанию, я получаю сообщение об ошибке в файле /project/var/log/prod.log.
Когда я изменяю путь к PHP: // STDERR, Я ожидаю того же сообщения в CloudWatch, но оно не появляется.

Я изменил index.php по причинам теста:

<?php
echo ini_get('error_log');
error_log('error_log');
file_put_contents('php://stderr', 'file_put_contents', FILE_APPEND);

Выход: /proc/self/fd/2 (докер регистрирует цель)

В CloudWatch я получаю сообщение error_log, но нет file_put_contents,

Я понятия не имею, где проблема. Возможно, приложение Symfony настроено неправильно. Но так как сообщение file_put_contents отсутствует — который работает без Symfony — я не уверен.

Это конфигурация монолога:

monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: nested
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
nested:
type: stream
#            path: "%kernel.logs_dir%/%kernel.environment%.log"path: "php://stderr"level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
deprecation:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.deprecations.log"deprecation_filter:
type: filter
handler: deprecation
max_level: info
channels: ["php"]

Это конфигурация по умолчанию, кроме строки path: "php://stderr",

1

Решение

Мне удалось получить вход Symfony в CloudWatch следующим образом:

Используйте этот пакет:

composer require maxbanton/cwh:^1.0

Тогда по моему config/packages/prod/monolog.yaml

monolog:
handlers:
main:
type: fingers_crossed
action_level: error
handler: grouped
excluded_404s:
# regex: exclude all 404 errors from the logs
- ^/
grouped:
type: group
members: [cloudwatch, nested]
nested:
type: stream
path: "%kernel.logs_dir%/%kernel.environment%.log"level: debug
console:
type: console
process_psr_3_messages: false
channels: ["!event", "!doctrine"]
cloudwatch:
type: service
id: cloudwatch_handler
level: error

Тогда по моему config/services.yaml

services:
cloudwatch_client:
class: Aws\CloudWatchLogs\CloudWatchLogsClient
arguments:
- credentials: { key: '%env(AWS_KEY)%', secret: '%env(AWS_SECRET)%' }
region: '%env(AWS_REGION)%'
version: "2014-03-28"
cloudwatch_handler:
class: Maxbanton\Cwh\Handler\CloudWatch
arguments:
- "@cloudwatch_client"- "symfony"              # groupName
- "%kernel.environment%" # streamName
- 30                     # retentionDays
- 10000                  # logsInBatch
- { mytag: "symfony" }   # tags
- WARNING                # logLevel

Затем я должен был убедиться, что у API-ключа, который я настроил, есть разрешения для CloudWatch в IAM, но после этого он отлично вошел в систему.

0

Другие решения

Других решений пока нет …