我刚刚安装了一个nginx + php-fpm服务器.除了PHP-FPM永远不会将错误写入其日志之外,一切似乎都很好.
fpm.conf
[default]
listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webusr
listen.group = webusr
listen.mode = 0666
user = webusr
group = webusr
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /php/fpm/status
ping.path = /php/fpm/ping
request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/default/slow.log
chroot = /var/www/sites/webusr
catch_workers_output = yes
env[HOSTNAME] = mapsvr.mapking.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/default/error.log
php_admin_flag[log_errors] = on
Run Code Online (Sandbox Code Playgroud)
nginx.conf
server
{
listen 80 default_server; …Run Code Online (Sandbox Code Playgroud) 我希望我的laravel应用程序能够运行得当,并具有良好的12因子应用程序。现在,我正在努力让他们在php-fpm下往返日志stdout(stderr对我来说也很好)。php版本是7.2.1,laravel版本是5.6.3。
我将laravel配置为使用single驱动程序写入stdout:
<?php
return [
'default' => env('LOG_CHANNEL', 'stack'),
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
],
'single' => [
'driver' => 'single',
'path' => 'php://stdout',
'tap' => [App\Logging\UseJsonFormatter::class],
'level' => 'debug',
],
];
Run Code Online (Sandbox Code Playgroud)
这在测试服务器上效果很好,但是fpm在它前面加上日期和警告:[19-Feb-2018 09:43:41] WARNING: [pool www] child 12 said into stdout:每〜1000个字符。该问题似乎被称为问题71880(前缀)和问题69031(截断)。一个拉入请求,去年看到最后的动作在六月/ 11月。是否有人有没有将日志消息分块或截断的解决方法(我正在记录json对象,并且我希望它们完整)?
为什么在写入标准输出时,PHP-FPM会在警告前添加前缀?与此有关,但仍未解决。
如果有人感兴趣,这是UseJsonFormatter.php:
<?php
namespace App\Logging;
use Monolog\Formatter\JsonFormatter;
class UseJsonFormatter
{
/**
* Customize the given …Run Code Online (Sandbox Code Playgroud)