直接运行 composer require monolog/monolog 即可安装,但必须配置 Handler、传入非空 name 参数、确保 PHP 版本兼容(v2≥7.2,v3≥8.1),并设置 Formatter,否则日志无法输出。

直接运行 composer require monolog/monolog 就能装上,但不配 Handler、不传 name、不检查 PHP 版本,90% 的人会卡在“写了日志却看不到”这一步。
为什么 composer require monolog 会失败
命令里漏掉 /monolog 是最常见错误——monolog 本身不是包名,monolog/monolog 才是官方唯一有效包名。其他如 monolog-core、php-log 都不存在或已废弃。
- 执行前先确认当前目录是项目根目录(含
composer.json或准备生成它) - 运行
php -v查 PHP 版本:Monolog v2.x 要求 ≥7.2,v3.x 要求 ≥8.1;若版本不符,composer require monolog/monolog:^3.0会直接报Your requirements could not be resolved - 国内用户常因源慢超时,可临时加
-vvv看卡点,或换镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com - 装完立刻检查
vendor/monolog/monolog/src/Monolog/Logger.php是否存在,比看终端输出更可靠
new \Monolog\Logger() 必须传 name 参数
Logger 构造函数的 name 不是可选参数,PHP 8+ 下传空字符串或 null 会直接抛 ArgumentCountError。这个 name 是 channel 名,影响日志路由、分类和调试上下文识别。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须写成
new \Monolog\Logger('app'),不能是new \Monolog\Logger('')或new \Monolog\Logger(null) - 多个 Logger 实例建议用不同
name,比如'db'、'api',方便后期分流处理 - 避免空格或特殊符号(如
'user login'),某些 Handler(如SyslogHandler)会因此出错
没加 Handler 就等于没写日志
Logger 只负责格式化和分发,不负责写入。不调 pushHandler(),哪怕调了 $logger->info('hello'),也什么都不会出现在文件、控制台或系统日志里。
- 开发阶段首选
StreamHandler:$logger->pushHandler(new \Monolog\Handler\StreamHandler(__DIR__.'/logs/app.log', \Monolog\Logger::INFO)) - 务必确保
logs/目录存在,且 Web 服务器用户(如www-data)有写权限,否则静默失败(无报错,日志就是不出现) - Handler 的第二个参数是最低记录级别:
Logger::INFO表示只记录info及以上(notice、warning、error…),别设成ERROR却只调info(),结果日志全被过滤 - 别漏
setFormatter(),否则默认输出 JSON,人眼难读;加个LineFormatter更实用:$handler->setFormatter(new \Monolog\Formatter\LineFormatter(null, null, true, true))
线上环境必须用 RotatingFileHandler 防磁盘撑爆
StreamHandler 会把所有日志追加进同一个文件,跑几天就几 GB,线上绝对不能用。Monolog v2 支持 RotatingFileHandler,v3 已移除,改用外部轮转方案,所以生产环境请锁定 v2。
- 安装时显式指定:
composer require monolog/monolog:^2.10 - 按天轮转示例:
new \Monolog\Handler\RotatingFileHandler(__DIR__.'/logs/app.log', 7, \Monolog\Logger::INFO),第三个参数7表示最多保留 7 天日志 - 注意:v3 中
RotatingFileHandler已废弃,强行用会报类不存在;如必须用 v3,请搭配WhatEverHandler+ 定时脚本做归档 - 轮转 Handler 同样要检查目录权限和
setFormatter,否则日志内容不可读或写入失败
真正容易被忽略的是 Handler 和 Formatter 的组合逻辑——Logger 是调度中心,Handler 是执行者,Formatter 是翻译官。三者缺一不可,且顺序不能乱:先 new Handler,再 setFormatter,最后 pushHandler。漏掉任一环,日志就停在半路。

















