claude-code-best/packages/acp-link/src/logger.ts
James Feng 39ba9a56fd feat: pull in Vite build system + complete packages/builtin-tools/
- Add Vite as alternative build (vite.config.ts, scripts/vite-plugin-*)
- Add dab04af7 RSS fix (distRoot, ripgrep path, post-build)
- Pull in packages/builtin-tools/ (+354 files)
- Pull in packages/agent-tools/, mcp-client/, acp-link/, weixin/
- Copy defines.ts from upstream for Vite compatibility
- Update package.json with Vite scripts and deps
2026-06-01 18:18:03 +08:00

88 lines
2.1 KiB
TypeScript

import pino from 'pino'
import { join } from 'node:path'
import { mkdirSync, existsSync } from 'node:fs'
let rootLogger: pino.Logger
export interface LoggerConfig {
debug: boolean
logDir?: string
}
/** Pretty-print config for console output */
const PRETTY_CONFIG = {
colorize: true,
translateTime: 'SYS:HH:MM:ss.l',
ignore: 'pid,hostname',
} as const
export function initLogger(config: LoggerConfig): pino.Logger {
const { debug, logDir } = config
if (debug) {
const dir = logDir || join(process.cwd(), '.acp-proxy')
if (!existsSync(dir)) {
mkdirSync(dir, { recursive: true })
}
const now = new Date()
const timestamp = now
.toISOString()
.replace(/T/, '_')
.replace(/:/g, '-')
.replace(/\..+/, '')
const logFile = join(dir, `acp-proxy-${timestamp}.log`)
// Debug mode: JSON to file + pretty to console (multistream)
rootLogger = pino(
{
level: 'trace',
timestamp: pino.stdTimeFunctions.isoTime,
},
pino.transport({
targets: [
{ target: 'pino/file', options: { destination: logFile } },
{
target: 'pino-pretty',
options: { ...PRETTY_CONFIG, destination: 1 },
},
],
}),
)
console.log(`📝 Debug logging enabled: ${logFile}`)
} else {
rootLogger = pino(
{ level: 'info', timestamp: pino.stdTimeFunctions.isoTime },
pino.transport({
target: 'pino-pretty',
options: { ...PRETTY_CONFIG, destination: 1 },
}),
)
}
return rootLogger
}
/** Get the root logger (auto-creates a default one if not initialized). */
export function getLogger(): pino.Logger {
if (!rootLogger) {
rootLogger = pino(
{ level: 'info' },
pino.transport({
target: 'pino-pretty',
options: { ...PRETTY_CONFIG, destination: 1 },
}),
)
}
return rootLogger
}
/**
* Create a child logger scoped to a module.
* Usage: `const log = createLogger("agent"); log.info({ pid }, "spawned")`
*/
export function createLogger(module: string): pino.Logger {
return getLogger().child({ module })
}