- npm workspaces 루트 (apps/*, packages/*) 세팅 - V1 전체를 apps/desktop/으로 git mv (src, resources, tests, sidecar, scripts, electron.vite.config.ts, electron-builder.yml, vitest.config.ts, tsconfig.node.json, tsconfig.web.json) - apps/desktop/package.json 신규 (name=@d3ro/desktop) - productName: 'd3ro-voice' 명시 — app.getName()을 고정하여 userData 경로 %APPDATA%\d3ro-voice\ 그대로 유지 (기존 DB/설정 연속성 보장) - 루트 package.json을 workspace 루트로 재구성, 공통 devDep만 유지 (typescript, eslint, prettier) - turbo.json, tsconfig.base.json 추가 (Turborepo 자체 설치는 별도 sub-phase) - memory/project_status.md 생성 (규칙 13) 검증: - npm run typecheck 통과 - npm run build 통과 (electron-vite main+preload+renderer) - npm run dev 실제 실행 → DB/핫키/Ollama 자동 실행 모두 정상
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
// src/main/services/LoggerService.ts
|
|
// electron-log 래퍼. 카테고리별 로깅을 지원한다.
|
|
|
|
import log from 'electron-log'
|
|
|
|
export interface CategoryLogger {
|
|
info(message: string, ...args: unknown[]): void
|
|
warn(message: string, ...args: unknown[]): void
|
|
error(message: string, ...args: unknown[]): void
|
|
debug(message: string, ...args: unknown[]): void
|
|
}
|
|
|
|
let initialized = false
|
|
|
|
export function initLoggerService(): void {
|
|
if (initialized) return
|
|
initialized = true
|
|
|
|
log.transports.file.maxSize = 5 * 1024 * 1024 // 5MB
|
|
log.transports.file.format = '[{y}-{m}-{d} {h}:{i}:{s}.{ms}] [{level}] {text}'
|
|
log.transports.console.format = '[{h}:{i}:{s}.{ms}] [{level}] {text}'
|
|
}
|
|
|
|
export function getLogger(category: string): CategoryLogger {
|
|
const prefix = `[${category}]`
|
|
return {
|
|
info: (message: string, ...args: unknown[]) => log.info(`${prefix} ${message}`, ...args),
|
|
warn: (message: string, ...args: unknown[]) => log.warn(`${prefix} ${message}`, ...args),
|
|
error: (message: string, ...args: unknown[]) => log.error(`${prefix} ${message}`, ...args),
|
|
debug: (message: string, ...args: unknown[]) => log.debug(`${prefix} ${message}`, ...args)
|
|
}
|
|
}
|