composer require monolog/monolog 默认安装 v3.x(需 php ≥ 8.1),php 7.4–8.0 项目须显式执行 composer require monolog/monolog:^2.10;装完需引入 vendor/autoload.php、new logger('app') 传非空 name、pushhandler 配置 streamhandler 并设 lineformatter,同时确保日志目录可写。

composer require monolog/monolog 这条命令本身就能装上,但绝大多数人卡在“装了却用不了”——根本原因不是命令错,而是 PHP 版本不匹配、autoloader 没引入、或者 Logger 实例没配 Handler。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
PHP 版本不匹配导致 install 失败
composer require monolog/monolog 默认拉取 v3.x,它要求 PHP ≥ 8.1。如果你用的是 PHP 7.4 或 8.0,会直接报错:Your requirements could not be resolved,而不是网络超时或权限问题。
- 查当前 PHP 版本:
php -v - PHP 7.2–8.0 项目必须显式指定 v2:
composer require monolog/monolog:^2.10 - 别写
^2.0(可能命中早期不稳定版),也别写2.10.*(Composer 不识别) - 装完验证:
composer show monolog/monolog看输出的versions是否为* 2.10.x
类找不到:autoload 没生效
装完后写new \Monolog\Logger('app') 报 Class 'Monolog\Logger' not found,99% 是因为没引入自动加载器。
- 入口脚本(如
index.php或cli.php)开头必须有:require <strong>DIR</strong> . '/vendor/autoload.php'; - 路径写错(比如少个
/vendor或多一层../)会导致静默失败——不是报错,而是后续直接 fatal error - Laravel/Symfony 等框架已内置 autoload,不用手动 require,但 ThinkPHP 等轻量框架需自行加
- 如果改过
composer.json又没跑composer dump-autoload,类也可能找不到
日志写不进文件:Handler 配置漏项或权限不对
Logger 实例创建后,不调 pushHandler(),哪怕反复调 $logger->info('hello'),也什么都不会发生。
- 最简可用写法:
$logger = new \Monolog\Logger('app'); $handler = new \Monolog\Handler\StreamHandler(__DIR__ . '/logs/app.log', \Monolog\Logger::INFO); $logger->pushHandler($handler); $logger->info('test log'); -
logs/目录必须存在,且 Web 服务器用户(如www-data)有写权限;用相对路径时,getcwd()决定根目录,别依赖 IDE 当前打开位置 -
StreamHandler第二个参数是最低记录级别:Logger::INFO表示debug()和notice()不会写入 - 默认输出是 JSON 格式,人眼难读;加
LineFormatter才能看清:$handler->setFormatter(new \Monolog\Formatter\LineFormatter(null, null, true, true));
真正容易被忽略的不是代码怎么写,而是工作目录是否可控、PHP 版本是否被 composer.json 中的 "php": "..." 锁死、以及日志路径的权限是否由 Web 进程实际持有。










