$status ]; // 更新nginx配置 Apps::nginxUpdate($appName); // 保存配置 if (Apps::saveAppLocalInfo($appName, $updateData)) { return Base::retSuccess('更新状态成功'); } else { return Base::retError('更新状态失败'); } } /** * @api {get} api/apps/logs 05. 获取应用日志 * * @apiVersion 1.0.0 * @apiGroup apps * @apiName logs * * @apiParam {String} app_name 应用名称 * @apiParam {Number} [lines=50] 获取日志行数,默认50行 * * @apiSuccess {Number} ret 返回状态码(1正确、0错误) * @apiSuccess {String} msg 返回信息(错误描述) * @apiSuccess {Object} data 返回数据 * @apiSuccess {String} data.log 日志内容 */ public function logs() { $appName = Request::input('app_name'); $lines = intval(Request::input('lines', 50)); if (empty($appName)) { return Base::retError('应用名称不能为空'); } // 限制获取行数 if ($lines <= 0) { $lines = 50; } else if ($lines > 2000) { $lines = 2000; } // 日志文件路径 $logFile = base_path('docker/logs/apps/' . $appName . '.log'); if (!file_exists($logFile)) { return Base::retSuccess('日志返回成功', [ 'log' => '' ]); } // 读取日志文件最后几行 $output = []; $cmd = 'tail -n ' . $lines . ' ' . escapeshellarg($logFile); exec($cmd, $output); $logContent = implode("\n", $output); return Base::retSuccess('日志返回成功', [ 'log' => $logContent ]); } }