我如何在 php-fpm 后面的 docker 中获取 laravel 的日志?

Jon*_*y96 4 php laravel docker

在开发过程中,我们在获取代码的真实错误日志时遇到了一些问题。

建筑学

nginx -> php-fpm 与 laravel

问题

无法获取laravel的日志

环境

  • 图像 php:7.2.8-fpm-alpine3.7
  • 码头工人 18.06.1-ce
  • 拉拉维尔 5.5

www.conf

[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
clear_env = no
catch_workers_output = yes

pm = dynamic
pm.max_children = 200
pm.start_servers = 80
pm.min_spare_servers = 50
pm.max_spare_servers = 80
pm.max_requests = 250
request_terminate_timeout = 60

slowlog = /var/log/error.log
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /usr/local/lib/session
php_value[soap.wsdl_cache_dir]  = /usr/local/lib/wsdlcache
;php_value[opcache.file_cache]  = /usr/local/lib/opcache

;monitoring
pm.status_path = /phpfpm_status
ping.path = /phpfpm_ping
ping.response = pong
Run Code Online (Sandbox Code Playgroud)

php.ini

error_log = "/var/log/error.log"
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
display_errors = On
display_startup_errors = On
...
Run Code Online (Sandbox Code Playgroud)

php-fpm.conf

include=/usr/local/etc/php-fpm.d/*.conf
[global]
error_log = "/var/log/error.log"
log_level = notice
events.mechanism = epoll
Run Code Online (Sandbox Code Playgroud)

我现在已经向文件 /var/log/error.log 和 access.log 添加了完全权限,我只在 access.log 和 error.log 中获取 php-fpm 日志

/var/log # cat error.log
[20-Mar-2019 06:08:34] NOTICE: fpm is running, pid 9
[20-Mar-2019 06:08:34] NOTICE: ready to handle connections
/var/log # cat access.log
172.28.0.5 -  20/Mar/2019:06:34:12 +0000 "GET /index.php" 200
172.28.0.5 -  20/Mar/2019:06:34:18 +0000 "POST /index.php" 200
/var/log # pwd
/var/log
Run Code Online (Sandbox Code Playgroud)

寻找答案

Sir*_*rsh 9

将 stderr/stdout 添加到 config/logging.php 中的日志记录堆栈

这是之前讨论过的,Taylor 在 laravel 附带的 config/logging.php 中的 stderr 输出 (php://stderr) 添加了一个示例 https://github.com/laravel/ideas/issues/126

或者只是更改 .env LOG_CHANNEL 示例引用原始评论:https://github.com/laravel/ideas/issues/126#issuecomment-438548169

在最近的版本(5.6+)中,默认的 config/logging.php 似乎包含 stderr 配置,因此您只需将 LOG_CHANNEL=stderr 环境变量注入到容器中即可。

这将根据您的日志记录级别将所有错误/日志重定向到 docker 日志