Целевой журнал PHP в приложении Symfony на AWS с CloudWatch - PullRequest
0 голосов
/ 01 февраля 2019

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

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

Я изменил индекс.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 Ответ

0 голосов
/ 11 февраля 2019

Мне удалось получить вход 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, но после этого он прекрасно зарегистрировался

...