PHP 日志记录 (Monolog)

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 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 开始。

推荐