php error not showing in php-apache docker

ozxc1zmp  于 2023-05-16  发布在  PHP
关注(0)|答案(1)|浏览(74)

我正在尝试从我的PHP Docker中获取错误日志。我发现error.log文件无处可去,因此修改了我的dockerfile如下:

FROM php:7.4-apache
RUN a2enmod rewrite
RUN docker-php-ext-install mysqli pdo pdo_mysql; \
    docker-php-ext-enable mysqli pdo pdo_mysql;

# Redirect apache log files to stdout, see https://github.com/moby/moby/issues/19616
RUN ln -sf /proc/1/fd/1 /var/log/apache2/access.log
RUN ln -sf /proc/1/fd/1 /var/log/apache2/error.log

生成以下文件:

# ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root     root     12 May 11 18:25 access.log -> /proc/1/fd/1
lrwxrwxrwx 1 root     root     12 May 11 18:25 error.log -> /proc/1/fd/1
lrwxrwxrwx 1 www-data www-data 11 Nov 15 04:17 other_vhosts_access.log -> /dev/stdout

这一部分现在正在发挥作用:运行echo "test" > /var/log/apache2/error.log会对docker日志进行写测试。另外,文件权限没有限制(请参阅https://stackoverflow.com/a/12566881/3519951)。
我添加了一个崩溃调用dfgdfga.test(),但错误没有显示。如果我创建一个日志文件而不是重定向到docker输出,情况也是一样。它仍然是空的。

zxlwwiss

zxlwwiss1#

当我复习这个问题的时候,我把它弄明白了。分享在这里,如果它可能会有所帮助。
运行php -i | grep log时,我发现:

log_errors => Off => Off

在我看来,这是一个令人惊讶的默认值,但足以解释日志的缺失。因此,我创建了一个小的ini文件(inspired from this article),将其直接传输到docker日志:

; log PHP errors to a file. E_ALL=32767
log_errors = on
error_reporting = 32767
error_log = /proc/1/fd/1

并将其复制到dockerfile中,如下所示:

COPY logging.ini /usr/local/etc/php/conf.d/logging.ini

相关问题