我目前用的是官方 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/