一、问题
公司小伙伴在一次的开发任务中,发现tp的日志不记录了,一开始以为是代码的异常。经过排查发现业务流程都执行完了,但是日志就是没有打印。
二、排查
于是查看相关log配置并没有异常,小伙伴的业务需要返回字符串给第三方,在代码中使用了
echo 'ok';
die;
我们知道die是直接让php立即退出,而我们的log配置中使用了异步记录log
'file' => [
// 日志记录方式
'type' => 'File',
// 日志保存目录
'path' => '',
// 单文件日志写入
'single' => false,
// 独立日志级别
'apart_level' => [],
// 最大日志文件数量
'max_files' => 0,
// 使用JSON格式记录
'json' => false,
// 日志处理
'processor' => null,
// 关闭通道日志写入
'close' => false,
// 日志输出格式化
'format' => '[%s][%s] %s',
// 是否实时写入
'realtime_write' => false,
],
就是这个 'realtime_write' => false ,再看tp的处理逻辑
$http = (new App())->http;
$response = $http->run();
$response->send();
$http->end($response);
异步的log是在end中save的,而上一步的send已经发出请求,且php脚本已经die掉了。所以日志在最后记录的代码没有执行,导致了日志的异常问题。
三、解决
正确的使用方式为,使用return返回你要的数据就行了
return 'ok';