php日志系统核心是error_log()或自定义写入+按大小/时间轮转+定期清理:按大小轮转需检查文件体积并重命名旧日志;按日期轮转则每日生成新文件;生产环境推荐logrotate工具自动管理。

PHP 记录与轮转系统运行日志,核心是用 error_log() 或自定义写入 + 按大小或时间切分文件 + 定期清理旧日志,不依赖外部服务也能稳定运行。
使用 error_log() 快速记录基础日志
PHP 内置的 error_log() 函数最轻量,适合记录错误、调试信息或简单运行状态:
- 直接写入系统日志(如 Linux 的
/var/log/syslog):error_log("App started", 0); - 写入指定文件(需确保目录可写):
error_log("[INFO] User login: admin\n", 3, "/var/log/myapp/app.log"); - 注意:用
3模式追加写入时,PHP 不自动轮转,需配合后续策略
按文件大小自动轮转日志
当日志文件超过设定阈值(如 10MB),重命名旧文件、新建空日志,避免单文件过大:
- 每次写入前检查当前日志大小:
if (filesize($logFile) > 10 * 1024 * 1024) - 将原文件重命名为
app.log.1,已有.1的升为.2,依此类推(最多保留 5 份) - 代码片段示例(轮转逻辑):
$logfile = '/var/log/myapp/app.log';
$maxSize = 10 * 1024 * 1024;
$keep = 5;
<p>if (file_exists($logfile) && filesize($logfile) > $maxSize) {
for ($i = $keep; $i > 0; $i--) {
$old = $logfile . '.' . $i;
$new = $logfile . '.' . ($i + 1);
if (file_exists($old)) rename($old, $new);
}
rename($logfile, $logfile . '.1');
}</p>按日期生成日志文件(时间轮转)
更清晰的归档方式:每天一个文件,文件名含日期,如 app-2024-06-15.log:
- 用
date('Y-m-d')动态生成文件名:$logFile = "/var/log/myapp/app-" . date('Y-m-d') . ".log"; - 无需手动轮转,自然按天分割;清理时只需删除 30 天前的文件:
find /var/log/myapp -name "app-*.log" -mtime +30 -delete - 适合需要按日排查问题的场景,也方便用 logrotate 工具统一管理
用 logrotate 配合 PHP 日志(推荐生产环境)
Linux 的 logrotate 是成熟可靠的轮转工具,比 PHP 自实现更健壮:
- 配置示例(
/etc/logrotate.d/myapp):
/var/log/myapp/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0644 www-data www-data
sharedscripts
}
- 搭配 PHP 写入固定路径(如
/var/log/myapp/app.log),logrotate 每天自动重命名、压缩、清理 - PHP 中无需处理轮转逻辑,专注业务日志内容即可
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











