在本地Valet环境中配置Monolog输出至php://stderr的日志位置问题
Laravel Valet环境下php://stderr的日志位置
在Laravel Valet的运行架构里,PHP通过php-fpm进程提供服务,php://stderr的输出会被nginx捕获,最终写入**~/.config/valet/Log/nginx-error.log**——就是你找到的那个nginx错误日志文件。
为什么和error_log()的输出位置不同?
error_log()的内容直接写入php-fpm自身的日志文件(php-fpm.log),这是PHP默认配置的错误日志通道;- 而
php://stderr属于php-fpm进程的标准错误流,Valet的nginx作为反向代理,会统一收集php-fpm进程的stderr/stdout输出,并存入自己的错误日志。
快速验证方法
在项目代码里添加一行测试代码:
fwrite(fopen('php://stderr', 'w'), '测试stderr日志内容');
访问项目后打开~/.config/valet/Log/nginx-error.log,就能找到这条测试日志。
关于Monolog配置的补充
如果配置Monolog后没看到日志,检查Handler是否正确指向php://stderr,基础配置示例如下:
use Monolog\Logger; use Monolog\Handler\StreamHandler; $logger = new Logger('project_log'); $logger->pushHandler(new StreamHandler('php://stderr', Logger::WARNING)); $logger->warning('这条日志会出现在nginx-error.log里');
内容的提问来源于stack exchange,提问作者Sonny
相关产品推荐
相关产品推荐

