配置 symfony monolog 保留 apache 日志

Posted

技术标签:

【中文标题】配置 symfony monolog 保留 apache 日志【英文标题】:Configure symfony monolog to keep apache logs 【发布时间】:2015-03-24 19:29:03 【问题描述】:

我在 Symfony 2 中使用以下 Monolog 配置在 /app/logs/ 目录中的文件中记录较小的错误,并针对所有严重错误发送电子邮件。

monolog:
    handlers:
        main:
            level: error
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_remaining.log"
            channels: ["!doctrine", "!request", "!security"]
        request:
            type: fingers_crossed
            handler: requests
        requests:
            type:    group
            members: [request_critical, request_error]
        request_critical:
            level: critical
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_request_critical.log"
            channels: [request]
        request_error:
            level: error
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_request.log"
            channels: [request]
        doctrine:
            level: error
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_doctrine.log"
            channels: [doctrine]
        security:
            level: error
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%_security.log"
            channels: [security]
        mail:
            type: fingers_crossed
            action_level: critical
            handler: buffered
        buffered:
            type: buffer
            handler: swift
        swift:
            type: swift_mailer
            from_email: "%mailer_from_address%"
            to_email:   "%development_address%"
            subject:    A critical error occurred

我的问题是,这个设置似乎阻止了 Apache 在虚拟主机配置中设置的本机日志记录:

<VirtualHost *:80>        
        <Directory "/mnt/vm/vm.healthcare-cpd/web">
           Header set Access-Control-Allow-Origin "*"
           Options Indexes FollowSymLinks MultiViews
           AllowOverride All
           Order allow,deny
           Allow from all
           Require all granted
        </Directory>

        php_flag log_errors on
        php_value error_reporting 2147483647

        ErrorLog $APACHE_LOG_DIR/vm.healthcare-cpd.error.log
        CustomLog $APACHE_LOG_DIR/vm.healthcare-cpd.access.log combined
        php_value error_log $APACHE_LOG_DIR/vm.healthcare-cpd.php.error.log
</VirtualHost>

$APACHE_LOG_DIR/vm.healthcare-cpd.error.logAPACHE_LOG_DIR/vm.healthcare-cpd.php.error.log文件为空,我认为是Monolog造成的。

所以我的问题是:如何在 Symfony 2 中配置 Monolog,以便 Apache 和 PHP 日志仍然与 Monolog 日志并行工作?

【问题讨论】:

【参考方案1】:

Apache 的错误日志与你的应用程序日志(Monolog)无关。

这里的问题是,如果您通过在 php 代码中捕获 php 错误或异常来处理错误,或者如果 Symfony 捕获这些错误并将它们转换为正确的响应(实际上它确实如此),Apache 将永远不会知道某些事情失败了,因此不会在其错误日志中记录任何内容。

【讨论】:

以上是关于配置 symfony monolog 保留 apache 日志的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony2 中使用 Monolog 进行日志旋转

使用 Monolog 在 Symfony2 中记录 PHP 致命错误

如何向 Symfony/Monolog 日志输出添加附加信息(主机、URL 等)?

Graylog2 与 Symfony 2 (Monolog)

Symfony2/Monolog:日志级别 - 仅显示 app.INFO?

如何在 Symfony 中对 Monolog 消息进行高级过滤?