什么是Monolog,为什么需要它?
Monolog 是PHP中用于日志记录的标准库。它提供了一套灵活而强大的工具,可以将日志写入到各种渠道(文件、数据库、电子邮件、系统日志、外部服务等)。Monolog是PHP应用程序的事实标准,尤其在Symfony、Laravel和其他现代框架的生态系统中。
为什么需要这个库?在任何应用程序中,都需要跟踪事件:错误、警告、信息性消息、调试信息。Monolog允许您:
- 集中式日志记录 — 以统一格式从应用程序的任何位置写入日志。
- 灵活配置渠道 — 将关键错误发送到Telegram/Slack,而将信息性消息写入文件。
- 格式化消息 — 添加日期、级别、上下文和调用堆栈。
- 过滤日志 — 仅处理特定级别的消息。
- 与框架集成 — 在Symfony、Laravel、Yii2中使用的正是Monolog。
安装
Monolog通过Composer(PHP的标准包管理器)安装。
composer require monolog/monolog如果您使用的是PHP 8.0+,建议安装最新的稳定版本。安装后,项目中将出现vendor文件夹和包含依赖项的composer.json文件。
快速入门
最简单的示例 — 将日志写入文件:
<?phprequire 'vendor/autoload.php';
use Monolog\\Logger;use Monolog\\Handler\\StreamHandler;
// 创建一个名为'my_app'的日志频道$log = new Logger('my_app');// 添加处理器 — 写入文件$log->pushHandler(new StreamHandler('app.log', Logger::WARNING));
// 现在可以记录日志了$log->warning('这是一个警告');$log->error('这是一个错误');
echo "日志已写入 app.log";?>执行脚本后,app.log文件中将出现类似以下内容:
[2025-04-09T10:30:00.123456+00:00] my_app.WARNING: 这是一个警告 [] [][2025-04-09T10:30:00.123789+00:00] my_app.ERROR: 这是一个错误 [] []主要方法和功能
让我们来看看Monolog的关键方法。它们都是Monolog\\Logger类或相关类的一部分。
1. pushHandler(HandlerInterface $handler)
功能: 向堆栈中添加一个处理器。日志记录器可以有多个处理器,每个处理器都会接收所有消息(如果未配置过滤)。
参数:
$handler— 实现Monolog\\Handler\\HandlerInterface的对象(例如StreamHandler、FirePHPHandler、SlackHandler)。
示例:
$log = new Logger('app');$log->pushHandler(new StreamHandler('debug.log', Logger::DEBUG));$log->pushHandler(new StreamHandler('errors.log', Logger::ERROR));// 现在级别为ERROR及以上的消息将写入两个文件2. addRecord(int $level, string $message, array $context = [])
功能: 用于记录日志的基本方法。通常不直接调用,而是使用包装方法(debug()、info()等)。
参数:
$level— 日志级别(常量:Logger::DEBUG、Logger::INFO、Logger::WARNING等)。$message— 消息文本。$context— 附加数据的数组(例如用户ID、IP地址)。
示例: