php - Apache2 PHP docker容器,如何将错误记录为stderr并将信息作为stdout记录到容器日志?

标签 php docker logging apache2

我目前用的是官方 php:7.4-apache 图像,我想在 docker 日志中记录一些信息和错误。
我意识到 PHP 不直接记录,而是记录到 Apache2 服务器,因为这是解释 PHP 的服务器。
尽管如此,我还是尝试了使用 official docker docs 中的信息的直接方法。 :

<?php

error_log('testlog', 3, '/proc/self/fd/1');
error_log('testerror', 3, '/proc/self/fd/2');
这给了我“无法打开流,文件不存在”警告。
我还注意到只需调用 error_log('test')创建以下日志而不写入 stderr:
[Tue Nov 10 11:39:46.005650 2020] [php7:notice] [pid 17] [client 172.25.0.1:56576] test
我试图弄清楚是否有任何特殊的方法可以向 Apache2 stdout/stderr 发送消息,但我找不到任何有用的东西。
有没有办法实现这一点,或者这只是在容器中记录 PHP 的错误方式?
!!编辑:!!
到目前为止,我已经设法发现原始 Dockerfile 中的日志定义是在 this 中处理的。文件到 /dev/stderr & /dev/stdout .
我还发现了以下可能性:
error_log('test', 3, 'php://stdout');
error_log('testerr', 3, 'php://stderr');
但这会导致以下输出:
> test 
> 172.25.0.1 - - [18/Nov/2020:13:19:48 +0000] "GET / HTTP/1.1" 200 229 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36"
> testerr 
目标是有这样的东西:
custom_info_log('test');
custom_error_log('testerr');
输出这个:
> [Wed Nov 18 13:19:48.459874 2020] [php7:info] [pid 20] [client 172.25.0.1:57398] test
> [Wed Nov 18 13:19:48.459874 2020] [php7:error] [pid 20] [client 172.25.0.1:57398] testerr

最佳答案

不知道这是否有帮助,但您可以使用以下命令将 PHP 的任何输出转发到文件:

ob_start();

//
// your script ....
//

$filePath = "path/to/your/log/file"
$outstream = ob_get_flush();
ob_clean();

if(!($file = fopen($filePath,"wb")))
{
    echo "unable to open log file" ; 
}
fwrite($file, $outstream);
fclose($file);
因此,也许您可​​以创建一个记录所有 php 输出的文件并将此文件内容转发到您的 docker 日志。

关于php - Apache2 PHP docker容器,如何将错误记录为stderr并将信息作为stdout记录到容器日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64768462/

相关文章:

php - 为什么 Codeigniter 的查询生成器返回错误的 MySQL 查询两次?

php - 从 Magento 销售 > 订单中删除已删除的订单

docker - 如何从容器化的 Dockerfile 向 GCP 进行身份验证

java - 如何将docker容器日志保存在机器上而不是容器中

java - 在使用 Logback 记录计算数据时,我们应该使用 isDebugEnabled() 吗?

java - 将日志字符串解析为可用部分

PHP把PM和AM变成24小时制

php - Facebook 发送按钮以一种奇怪的方式弹出 - 如何修复它

docker - 同一容器中 python 和 nodejs 的多阶段构建

mysql - 从容器内连接到远程 mysql 数据库