PHP接口日志可通过error_log快速实现,记录请求、参数、耗时、错误等;开发期轻量高效,生产环境推荐Monolog专业库。

PHP接口没日志,不是不能记,是还没加。加几行代码,就能让每次请求、参数、返回、耗时、错误都留下痕迹,排查问题不再靠猜。
用 error_log 快速打点
最轻量的方式,适合开发调试或低流量接口。直接在关键位置调用 error_log(),日志会写入 PHP 的错误日志(通常是 /var/log/php_errors.log 或 Apache/Nginx 的 error_log)。
- 记录请求参数:
error_log('[API] POST /login: ' . json_encode($_POST), 3, '/var/log/myapi.log'); - 记录执行耗时:
$start = microtime(true); ... $cost = microtime(true) - $start; error_log("[API] /order finished in {$cost:.3f}s", 3, '/var/log/myapi.log'); - 捕获异常:
} catch (Exception $e) { error_log('[API ERROR] ' . $e->getMessage() . ' in ' . $e->getFile() . ':' . $e->getLine(), 3, '/var/log/myapi.log');
封装一个简易日志函数
避免重复写路径和格式,抽成函数更清晰:
function api_log($msg, $level = 'INFO') {
$time = date('Y-m-d H:i:s');
$ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';
$uri = $_SERVER['REQUEST_URI'] ?? '';
$line = "[{$time}] [{$level}] [{$ip}] {$uri} | {$msg}\n";
error_log($line, 3, '/var/log/myapi.log');
}之后直接用:api_log('user_id=123, status=success'); 或 api_log('DB query failed', 'ERROR');
立即学习“PHP免费学习笔记(深入)”;
记录响应内容(谨慎开启)
敏感接口(如含手机号、token、密码)不建议记录完整响应体。如确需调试,可选择性记录:
- 只记状态码和大致结构:
api_log("RESP: HTTP/{$httpCode}, keys=" . json_encode(array_keys($data)) ); - 脱敏后再记录:
$safeData = array_merge($data, ['token' => '***', 'id_card' => '***']); api_log('RESP: ' . json_encode($safeData)); - 用 ob_start() 拦截输出(适合无框架裸写接口):
ob_start(); echo json_encode($response); $output = ob_get_clean(); api_log('OUT: ' . substr($output, 0, 500)); // 截断防日志过大 echo $output;上线后建议用 monolog 等专业库
error_log 适合起步,但生产环境推荐 monolog:支持多通道(文件/邮件/Sentry)、日志级别、自动轮转、上下文变量等。
- 安装:
composer require monolog/monolog - 初始化一次即可复用:
use Monolog\Logger; use Monolog\Handler\StreamHandler; <p>$logger = new Logger('api'); $logger->pushHandler(new StreamHandler('/var/log/myapi_prod.log', Logger::INFO)); $logger->info('User login', ['uid' => 123, 'ip' => $ip]);
- 安装:



















