直接运行 composer require monolog/monolog 可安装,但需先确认 PHP 版本(v2≥7.2、v3≥8.1)、Composer 可用性及项目含 composer.json;安装后验证 autoload 和日志路径权限,再运行最小示例写入日志。

直接运行 composer require monolog/monolog 就能装上,但实际项目中常因 PHP 版本、自动加载冲突或日志路径权限问题导致后续写不进日志——得先看清环境再动手。
确认 PHP 版本和 Composer 可用性
Monolog v2.x 要求 PHP ≥ 7.2,v3.x 要求 ≥ 8.1。执行以下命令快速验证:
php -v composer --version
常见卡点:
- PHP 版本低于要求时,
composer require会报Your requirements could not be resolved - 没设全局 Composer 镜像(尤其国内),安装可能超时;可临时加
-vvv看卡在哪一步 - 项目根目录下没有
composer.json?先运行composer init或至少确保有该文件(哪怕空)
执行安装并检查 autoload 是否生效
在项目根目录运行:
composer require monolog/monolog:^3.0
推荐显式指定版本号(如 ^3.0),避免默认拉到 v2 导致 PHP 8.1+ 项目出现 Deprecated: Return type 类警告。安装后检查:
-
vendor/autoload.php是否存在且可被 include -
vendor/composer/autoload_classmap.php里是否含"Monolog\\"映射 - 如果用的是 Laravel、Symfony 等框架,无需手动引入 autoload —— 它们已集成 Composer 自动加载机制
写个最小可用示例验证日志写入
别急着配通道或处理器,先跑通基础写入:
pushHandler(new StreamHandler(__DIR__ . '/logs/app.log', Logger::INFO));
$log->info('App started');
$log->error('Something went wrong');
?>
注意几个易错点:
-
logs/目录必须存在且 Web 服务器用户(如 www-data、nginx)有写权限,否则报failed to open stream: Permission denied - PHP 错误报告级别若关闭了
E_WARNING,写入失败可能静默,建议开发时开error_reporting(E_ALL); ini_set('display_errors', '1'); - Windows 下路径分隔符用
/更稳妥(Monolog 内部处理兼容),别硬拼\
Monolog 的核心其实是 Handler + Formatter + Processor 的组合,但第一步只要能写出一行 [2024-06-15T10:22:33.123456+00:00] app.INFO: App started [] [] 就算过第一关。后面加 Slack 推送、数据库存储、日志轮转,都得建立在这个可写、可读、无权限报错的基础上。










