Tho*_*odi 7 php logging apache2 docker
我目前正在使用官方php:7.4-apache映像,我想将一些信息和错误记录到 docker 日志中。
我意识到 PHP 不直接记录,而是记录到 Apache2 服务器,因为这是解释 PHP 的服务器。
尽管如此,我还是尝试了使用官方 docker 文档中的信息的直接方法:
<?php
error_log('testlog', 3, '/proc/self/fd/1');
error_log('testerror', 3, '/proc/self/fd/2');
Run Code Online (Sandbox Code Playgroud)
这给了我一个“无法打开流,文件不存在”的警告。
我还注意到,简单地调用error_log('test')会创建以下日志,而不会写入 stderr:
[Tue Nov 10 11:39:46.005650 2020] [php7:notice] [pid 17] [client 172.25.0.1:56576] test
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚是否有任何特殊的方法可以向 Apache2 stdout/stderr 发送消息,但我找不到任何有用的东西。
有没有办法实现这一点,或者这只是在容器中记录 PHP 的错误方法?
!!编辑:!!
到目前为止,我已经设法发现原始 Dockerfile 中的日志定义在此文件中处理为/dev/stderr& /dev/stdout。
我还发现了以下可能性:
error_log('test', 3, 'php://stdout');
error_log('testerr', 3, 'php://stderr');
Run Code Online (Sandbox Code Playgroud)
但这会产生以下输出:
> 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
Run Code Online (Sandbox Code Playgroud)
目标是拥有这样的东西:
custom_info_log('test');
custom_error_log('testerr');
Run Code Online (Sandbox Code Playgroud)
输出这个:
> [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
Run Code Online (Sandbox Code Playgroud)
Jer*_*kar -1
不知道这是否有帮助,但您可以使用以下命令将 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);
Run Code Online (Sandbox Code Playgroud)
因此,也许您可以创建一个记录所有 php 输出的文件,并将该文件内容转发到您的 docker 日志。