3.7 KiB
3.7 KiB
todos:
- id: "scaffold" content: "创建 webman-log 目录与 composer.json、.gitignore、phpunit.xml.dist" status: pending
- id: "src" content: "复制 SeasLogHandler / SeasLogLineFormatter / TraceContext 到 src 并改为 Quanfuxia\Log 命名空间" status: pending
- id: "tests" content: "复制 tests(bootstrap、config/app、config/log、Log 测试)并改命名空间引用" status: pending
- id: "readme" content: "编写新库 readme.md(用途、安装、log.php 接入示例、ext-seaslog 要求)" status: pending
- id: "verify" content: "容器内 composer install 并运行 phpunit 验证" status: pending isProject: false
webman-log 独立库拆分方案
目标与决策
- 位置:同级目录
/Users/ray/Documents/project/www/ray/webman-log - 包名
quanfuxia/log,命名空间Quanfuxia\Log\ - 完全独立:自带一份 trace 上下文,不依赖
slot/foundation - 原库
slot-foundation/src/Log及其引用保持不动(仅复制)
来源文件(复制并改命名空间)
- src/Log/SeasLogHandler.php →
webman-log/src/SeasLogHandler.php,命名空间改为Quanfuxia\Log,use slot\foundation\Trace\TraceContext改为use Quanfuxia\Log\Trace\TraceContext - src/Log/SeasLogLineFormatter.php →
webman-log/src/SeasLogLineFormatter.php,命名空间改为Quanfuxia\Log - src/Trace/TraceContext.php →
webman-log/src/Trace/TraceContext.php,命名空间改为Quanfuxia\Log\Trace(自带,保证独立)
新建库目录结构
webman-log/
composer.json
.gitignore
phpunit.xml.dist
readme.md
src/
SeasLogHandler.php # Quanfuxia\Log
SeasLogLineFormatter.php # Quanfuxia\Log
Trace/TraceContext.php # Quanfuxia\Log\Trace
tests/
bootstrap.php
config/
app.php
log.php
Log/
SeasLogLineFormatterTest.php
composer.json 要点
{
"name": "quanfuxia/log",
"type": "library",
"autoload": { "psr-4": { "Quanfuxia\\Log\\": "src/" } },
"autoload-dev": { "psr-4": { "Tests\\": "tests/" } },
"require": {
"php": ">=8.2",
"monolog/monolog": "^2.0",
"workerman/webman-framework": "^2.1"
},
"suggest": { "ext-seaslog": "写入 SeasLog 需要该扩展" },
"require-dev": { "phpunit/phpunit": "^11.5" }
}
说明:保留 workerman/webman-framework,因为 TraceContext 用 Webman\Context,SeasLogHandler 用 runtime_path() / request() 辅助函数。
依赖关系
graph LR
Monolog[Monolog Logger] --> Handler[SeasLogHandler]
Handler --> Formatter[SeasLogLineFormatter]
Handler --> Trace[TraceContext]
Handler --> SeasLog[ext-seaslog]
Trace --> Ctx[Webman Context]
测试与配置
- 复制并改命名空间:
tests/Log/SeasLogLineFormatterTest.php(use Quanfuxia\Log\...) - 复制
tests/bootstrap.php、tests/config/app.php - 复制
tests/config/log.php并把 handler/formatter 类引用改为Quanfuxia\Log\命名空间 phpunit.xml.dist与原库一致(testsuite 名改为quanfuxia-log).gitignore复用原库内容(vendor、runtime、.phpunit.cache 等)
readme.md
新库 readme 说明:用途(Monolog→SeasLog 适配、自动注入 trace_id)、安装、config/log.php 接入示例、对 ext-seaslog 的要求。
验证
拆分后在容器内运行:
docker exec php82 sh -lc 'cd /app/www/ray/webman-log && composer install && ./vendor/bin/phpunit'