需通过Composer安装Monolog并手动集成:先确认Composer和PHP版本,再执行composer require monolog/monolog:^2.10;接着在common.php中引入autoload、实例化Logger、添加Handler并绑定容器;最后在控制器中获取实例调用PSR-3方法记录日志,支持多通道输出。

如果您希望在ThinkPHP项目中集成Monolog日志库以增强日志记录能力,则需通过Composer安装并正确配置。以下是实现该目标的具体步骤:
一、确认Composer已全局安装并可用
Composer是PHP的依赖管理工具,必须先确保其已正确安装且可在命令行中执行。若未安装,需先下载并配置环境变量。
1、打开终端或命令提示符,输入 composer --version 检查是否返回版本号。
2、若提示“command not found”或类似错误,需前往 https://getcomposer.org/download/ 下载并按官方指南完成安装。
立即学习“PHP免费学习笔记(深入)”;
3、验证PHP版本是否满足要求:Monolog 2.x 需 PHP >=7.3,可通过 php -v 查看当前PHP版本。
二、在ThinkPHP项目根目录执行Composer安装命令
Monolog作为独立PSR-3兼容日志库,无需ThinkPHP专用扩展,可直接通过Composer引入并手动集成。
1、进入ThinkPHP项目根目录(即包含 think 目录与 composer.json 的路径)。
2、运行命令:composer require monolog/monolog:^2.10 安装稳定版Monolog。
3、等待安装完成,确认 vendor/monolog/monolog 目录已生成且 vendor/autoload.php 可被正常加载。
三、创建Monolog实例并注入到ThinkPHP日志系统
ThinkPHP默认使用自身Log类,需绕过内置日志驱动,通过手动实例化Monolog对象实现接管。
1、在 app/common.php 或应用初始化文件中添加如下代码:
2、引入自动加载:require_once __DIR__ . '/../vendor/autoload.php';
3、实例化Monolog:$logger = new \Monolog\Logger('thinkphp');
4、添加处理器(如文件处理器):$logger->pushHandler(new \Monolog\Handler\StreamHandler('../runtime/log/app.log', \Monolog\Logger::INFO));
5、将 $logger 实例绑定至容器:\think\Container::getInstance()->bind('monolog', function() use ($logger) { return $logger; });
四、在控制器或业务逻辑中调用Monolog记录日志
通过容器获取已注册的Monolog实例,即可使用标准PSR-3方法写入结构化日志。
1、在控制器方法内获取实例:$log = \think\Container::getInstance()->get('monolog');
2、记录调试信息:$log->debug('用户登录尝试', ['user_id' => 123, 'ip' => request()->ip()]);
3、记录错误信息:$log->error('数据库查询失败', ['sql' => $sql, 'error' => $e->getMessage()]);
4、支持日志级别包括 debug、info、notice、warning、error、critical、alert、emergency。
五、配置多通道日志输出(可选进阶用法)
Monolog支持为不同用途分配独立处理器,例如将错误日志单独写入error.log,审计日志写入audit.log。
1、创建多个Handler实例:$errorHandler = new \Monolog\Handler\StreamHandler('../runtime/log/error.log', \Monolog\Logger::ERROR);
2、创建审计日志Handler:$auditHandler = new \Monolog\Handler\StreamHandler('../runtime/log/audit.log', \Monolog\Logger::INFO);
3、为同一Logger添加多个Handler:$logger->pushHandler($errorHandler); $logger->pushHandler($auditHandler);
4、使用上下文区分日志类型:$logger->info('用户修改资料', ['event' => 'profile_update', 'user_id' => 456]);











