cc3a5dc5ad
为什么选 LogTape(2026 实测):
- pino 在 bun build --compile 编译产物里因 worker_threads + 动态 require 在
/\$bunfs/ 虚拟文件系统中崩溃,与单二进制部署核心目标冲突;
- LogTape 零依赖(5.3KB)、零 worker、纯 ESM、原生 Bun 导出条件,runtime
agnostic,配合 configureSync 完美兼容 --bytecode 模式(无裸 top-level await);
- 一等公民集成:@logtape/drizzle-orm(SQL 查询日志)、@logtape/otel(后续
OpenTelemetry sink 留扩展点)。
变更:
- src/server/logger.ts: configureSync 引导 + getLogger 重导出。format 默认
process.stdout.isTTY ? pretty : json,可经 LOG_FORMAT 显式覆盖(绕开 Bun
bundler 把 process.env.NODE_ENV 在 --minify 时 inline 成字面量的特殊处理)。
- src/server/api/interceptors.ts: logError 改用 getLogger(['api']).error(...) +
结构化 properties,弃 logger.error 顶层 API。
- src/cli/migrate.ts: 所有 console.log 改走 getLogger(['cli','migrate']),logger
在 run() 内 lazy-import 以保持 citty subcommand 模块体 side-effect-free。
- src/server/db/index.ts: env.LOG_DB=true 时挂 DrizzleLogger 适配器,SQL 查询
按类别 ['db'] 在 debug 级输出(含 query/params/formattedQuery 三字段)。
新增 env 旋钮(t3-oss 校验):
- LOG_LEVEL: trace|debug|info|warning|error|fatal,默认 info
- LOG_FORMAT: pretty|json,默认 TTY 自动选
- LOG_DB: stringbool,默认 false
端到端验证(compose + Postgres 18-alpine):
- TTY 终端:pretty 输出含 ✨ 图标 + ANSI 彩色 + 类别·路径 ✓
- 管道/Docker:JSON Lines 一行一条,含 @timestamp/level/logger/properties ✓
- LOG_FORMAT=pretty 强制覆盖 ✓
- ./server migrate 应用 migration 并经 logger 输出 ✓
- ./server serve + RPC round-trip:interceptor logError 与 drizzle SQL 日志
在生产 JSON 模式下结构化输出 ✓
- fix / typecheck / test 3/3 / build / compile 117M 二进制全绿
73 lines
2.5 KiB
JSON
73 lines
2.5 KiB
JSON
{
|
|
"name": "fullstack-starter",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"imports": {
|
|
"#drizzle/*.sql": "./drizzle/*.sql",
|
|
"#package": "./package.json",
|
|
"#server": "./.output/server/index.mjs"
|
|
},
|
|
"scripts": {
|
|
"build": "bunx --bun vite build",
|
|
"cli": "bun bin.ts",
|
|
"compile": "bun compile.ts",
|
|
"compile:darwin": "bun run compile:darwin:arm64 && bun run compile:darwin:x64",
|
|
"compile:darwin:arm64": "bun compile.ts --target bun-darwin-arm64",
|
|
"compile:darwin:x64": "bun compile.ts --target bun-darwin-x64",
|
|
"compile:linux": "bun run compile:linux:x64 && bun run compile:linux:arm64",
|
|
"compile:linux:arm64": "bun compile.ts --target bun-linux-arm64",
|
|
"compile:linux:x64": "bun compile.ts --target bun-linux-x64",
|
|
"compile:windows": "bun run compile:windows:x64",
|
|
"compile:windows:x64": "bun compile.ts --target bun-windows-x64",
|
|
"db:embed": "bun embed-migrations.ts",
|
|
"db:generate": "drizzle-kit generate && bun embed-migrations.ts",
|
|
"db:migrate": "drizzle-kit migrate",
|
|
"db:push": "drizzle-kit push",
|
|
"db:studio": "drizzle-kit studio",
|
|
"dev": "bunx --bun vite dev",
|
|
"fix": "biome check --write",
|
|
"test": "bun test",
|
|
"typecheck": "tsc --noEmit"
|
|
},
|
|
"dependencies": {
|
|
"@logtape/drizzle-orm": "^2.0.5",
|
|
"@logtape/logtape": "^2.0.5",
|
|
"@logtape/pretty": "^2.0.5",
|
|
"@orpc/client": "^1.14.0",
|
|
"@orpc/contract": "^1.14.0",
|
|
"@orpc/openapi": "^1.14.0",
|
|
"@orpc/server": "^1.14.0",
|
|
"@orpc/tanstack-query": "^1.14.0",
|
|
"@orpc/zod": "^1.14.0",
|
|
"@t3-oss/env-core": "^0.13.11",
|
|
"@tanstack/react-query": "^5.100.1",
|
|
"@tanstack/react-router": "^1.168.24",
|
|
"@tanstack/react-router-ssr-query": "^1.166.11",
|
|
"@tanstack/react-start": "^1.167.48",
|
|
"citty": "^0.2.2",
|
|
"drizzle-orm": "0.45.2",
|
|
"drizzle-zod": "^0.8.3",
|
|
"postgres": "^3.4.9",
|
|
"react": "^19.2.5",
|
|
"react-dom": "^19.2.5",
|
|
"uuid": "^14.0.0",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"devDependencies": {
|
|
"@biomejs/biome": "^2.4.13",
|
|
"@tailwindcss/vite": "^4.2.4",
|
|
"@tanstack/devtools-vite": "^0.6.0",
|
|
"@tanstack/react-devtools": "^0.10.2",
|
|
"@tanstack/react-query-devtools": "^5.100.1",
|
|
"@tanstack/react-router-devtools": "^1.166.13",
|
|
"@types/bun": "^1.3.13",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"drizzle-kit": "0.31.10",
|
|
"nitro": "npm:nitro-nightly@3.0.1-20260424-182106-f8cf6ccc",
|
|
"tailwindcss": "^4.2.4",
|
|
"typescript": "^6.0.3",
|
|
"vite": "^8.0.10"
|
|
}
|
|
}
|