什么是 PHP 中的日志记录以及为什么需要它?
日志记录是记录应用程序运行信息的过程:错误、警告、调试消息和用户操作。与 Python 不同,PHP 没有内置的 PSR 兼容记录器(尽管有 error_log() 函数)。因此,最佳解决方案是使用 Monolog 库——PHP 项目日志记录的事实标准。
为什么要进行日志记录?
- 生产环境调试(错误的堆栈跟踪)
- 性能监控
- 安全审计(登录、数据更改)
- 用户行为分析
安装 Monolog
通过 Composer(PHP 的 pip 对应工具)进行安装:
composer require monolog/monolog运行需要 PHP 8.0+ 和 Composer 2.x。
主要功能与特性
Monolog 支持:
- 通道 (Channels) — 针对应用程序不同部分(例如 'security', 'database')的隔离记录器
- 日志级别 (DEBUG, INFO, WARNING, ERROR, CRITICAL 等)
- 处理器 (Handlers) — 写入目标:文件、数据库、Slack、Telegram、电子邮件
- 处理器 (Processors) — 用上下文(IP、时间、会话)丰富消息
代码示例
<?phprequire 'vendor/autoload.php';
use Monolog\\Logger;use Monolog\\Handler\\StreamHandler;use Monolog\\Handler\\TelegramBotHandler;use Monolog\\Processor\\WebProcessor;
// 创建通道 'app'$log = new Logger('app');
// 用于写入文件的处理器$log->pushHandler(new StreamHandler(__DIR__.'/logs/app.log', Logger::WARNING));
// 用于 Telegram 的处理器(可选)$telegram = new TelegramBotHandler('YOUR_BOT_TOKEN', 'CHAT_ID', Logger::CRITICAL);$log->pushHandler($telegram);
// 用于添加 IP 和 User-Agent 的处理器$log->pushProcessor(new WebProcessor());
// 记录日志$log->info('用户登录系统', ['user_id' => 123]);$log->error('数据库错误', ['sql' => 'SELECT * FROM users']);何时使用
在以下情况下必须使用 Monolog:
- 任何商业或开源 PHP 项目(Symfony、Laravel 默认使用 Monolog)
- 微服务和 API — 用于请求追踪
- 定时任务脚本和工作进程 — 用于跟踪任务执行
- 与外部服务集成时(日志发送到 Graylog、Sentry、Papertrail)
该库已在数千个项目中进行测试,并支持几乎任何日志传输方式。如果您使用 PHP 编写代码,请从 Monolog 开始。