gpt4 book ai didi

使用 CloudWatch 在 AWS 上的 Symfony 应用程序中的 PHP 日志目标

转载 作者:行者123 更新时间:2023-12-05 01:16:05 24 4
gpt4 key购买 nike

我有一个在 AWS 上使用 Docker 托管的 Symfony 应用程序。对于日志记录,我使用 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 (docker logs target)

在 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" 这一行。

最佳答案

我通过以下方式设法让 Symfony 将日志记录到 CloudWatch:

使用这个包:

composer 需要 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 key 在 IAM 中具有 CloudWatch 权限,但之后它会完美记录

关于使用 CloudWatch 在 AWS 上的 Symfony 应用程序中的 PHP 日志目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54484214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com