核心是选对包、配对通道、让日志可追溯上下文:composer require topthink/think-log后,在config/log.php中配置trace_json通道启用json=>true和trace_id=>true,并确保runtime/log/可写。

Composer 安装 ThinkPHP 日志分析插件,核心不是“装一个包就自动监控”,而是选对包、配对通道、让日志可追溯上下文。直接 composer require 某个名字带“log”或“monitor”的包,大概率没用——TP5/6 自身日志体系和第三方可观测性工具的集成点很具体,错一步就白装。
tp6 用 topthink/think-log 实现结构化与 trace_id 注入
这是目前最轻量、最贴合 TP6 原生逻辑的日志增强方案,不替换底层,只扩展通道能力。
-
topthink/think-log会自动注册服务提供者,装完即可用,无需改config/app.php的providers - 必须在项目根目录(含
app/、config/、composer.json)执行:composer require topthink/think-log - 装完后,在
config/log.php的channels数组里加一个 JSON 通道:'trace_json' => [ 'type' => 'file', 'path' => runtime_path('log'), 'json' => true, 'trace_id' => true, 'format' => '{datetime} {level} {message} {context}', ], - 注意:如果
runtime/log/不可写,日志会静默失败,页面无报错但文件为空——先chmod -R 755 runtime/
tp5/tp6 都能用 monolog/monolog,但加载方式不同
Monolog 是 PSR-3 标准实现,通用性强,但 TP5 和 TP6 对它的接入方式差异大,容易卡在 autoload 或容器绑定上。
- TP6 推荐用
composer require monolog/monolog:^2.10,然后在app/provider.php中手动绑定:use Monolog\Logger; use Monolog\Handler\StreamHandler; $container->bind('logger', function () { $log = new Logger('tp'); $log->pushHandler(new StreamHandler(runtime_path('log/monolog.log'))); return $log; }); - TP5.1+ 才支持
files类型 autoload,若扩展包依赖files(比如某些 Monolog 封装),需确认其composer.json里"autoload": {"files": ["src/functions.php"]}被正确识别;TP5.0 不支持,会跳过 - 别在
config/log.php里直接填Monolog\Logger类名——TP5/6 的日志工厂不认这个,必须走容器或自定义驱动
为什么 composer require 后 /telescope 404 或报错 Class not found
Telescope 是 Laravel 生态工具,不能直接用于 ThinkPHP。强行装 laravel/telescope 到 TP 项目里,只会导致 autoload 冲突、类找不到、甚至破坏 vendor/autoload.php 的 PSR-4 映射顺序。
- 常见错误现象:
Class 'Laravel\Telescope\TelescopeServiceProvider' not found,这不是安装失败,是它根本不在 TP 的服务发现机制里 - TP 没有
php artisan telescope:install命令,运行就报Command "telescope:install" is not defined - 想在 TP 里做类似 Telescope 的请求追踪?得换思路:用
topthink/think-log+ 自定义中间件记录请求耗时、IP、路由、参数,并输出到trace_json通道 - 如果硬要集成 Laravel 工具链,唯一可行路径是把 TP 作为子模块嵌入 Laravel 项目(极少见,维护成本高)
真正难的不是命令怎么敲,而是分清哪些日志能力是框架原生支持的、哪些要靠扩展补足、哪些根本不在同一生态里。比如 trace_id 注入,topthink/think-log 一行配置搞定;而请求链路追踪(span、parent_id),TP 目前没标准方案,得自己用中间件 + 上报逻辑搭。别指望一个 composer require 解决所有问题。











