直接用 composer require monolog/monolog 安装需先确认 PHP 版本(3.x≥8.1,2.x≥7.2)和 Composer 可用性;若提示命令未找到,应检查 PATH 或改用 php composer.phar require;安装后须确保 vendor/autoload.php 在 Logger 实例化前被正确引入;使用 StreamHandler 时需保证日志路径存在、可写且已加载 Monolog\Level。

直接用 composer require monolog/monolog 就能装上,但实际项目里常因 PHP 版本、自动加载或日志路径权限出问题,得一个个对齐。
确认 PHP 版本和 Composer 可用性
Monolog 3.x 要求 PHP >= 8.1,2.x 支持到 PHP 7.2;装之前先跑 php -v 和 composer --version 看清楚。如果提示 Command 'composer' not found,不是“没装 Composer”,而是没加进系统 PATH,或者用了 php composer.phar 这种本地调用方式——此时命令得写成 php composer.phar require monolog/monolog。
执行安装并检查 autoload 是否生效
在项目根目录运行:
composer require monolog/monolog
成功后会更新 composer.json 和 vendor/autoload.php。关键点在于:如果你是手动引入 vendor/autoload.php(比如 require 'vendor/autoload.php';),必须确保这行代码在创建 Logger 实例之前执行;否则会报 Class 'Monolog\Logger' not found。常见疏漏:
立即学习“PHP免费学习笔记(深入)”;
- 忘了
require或include自动加载文件 - 路径写错,比如写成
./vendor/autoload.php却在子目录下运行脚本 - 用了 PSR-4 自定义命名空间但没跑
composer dump-autoload
初始化 Logger 时避开常见路径和权限坑
Monolog 默认不写文件,要显式加 StreamHandler。下面这段看着没问题,但容易失败:
$logger = new Monolog\Logger('app');
$logger->pushHandler(new Monolog\Handler\StreamHandler('/var/log/app.log', Monolog\Level::Info));
问题往往出在:
-
/var/log/app.log所在目录不存在,PHP 没权限创建父目录 → 改用已存在的可写路径,如__DIR__ . '/logs/app.log',并提前mkdir -p logs && chmod 755 logs - 没加载
Monolog\Level类(Monolog 3+ 强制使用枚举)→ 补上use Monolog\Level; - PHP 进程用户(如 www-data)对目标路径无写权限 → 用
ls -ld /path/to/logs检查属主和权限
Monolog 的 Handler 链和 Formatter 配置看似灵活,但一旦路径不可写或类没正确加载,错误信息非常安静——它可能只抛一个 Warning 而不中断执行,日志就悄无声息地丢了。











