From 117980175e373786d2e91ad5e4e73f5b62bf8745 Mon Sep 17 00:00:00 2001 From: Ejae-dev Date: Tue, 3 Feb 2026 23:40:58 +0100 Subject: [PATCH] refactor: deduplicate logger into shared module (#39) three files created identical pino logger instances with the same config. extract into src/logger.ts and import from each consumer. net -9 lines, no behavior change. Co-authored-by: ejae Co-authored-by: Claude Opus 4.5 --- src/container-runner.ts | 7 +------ src/index.ts | 7 +------ src/logger.ts | 6 ++++++ src/task-scheduler.ts | 7 +------ 4 files changed, 9 insertions(+), 18 deletions(-) create mode 100644 src/logger.ts diff --git a/src/container-runner.ts b/src/container-runner.ts index 38e6b7b..cfcda9e 100644 --- a/src/container-runner.ts +++ b/src/container-runner.ts @@ -6,7 +6,6 @@ import { spawn } from 'child_process'; import fs from 'fs'; import os from 'os'; import path from 'path'; -import pino from 'pino'; import { CONTAINER_IMAGE, @@ -15,14 +14,10 @@ import { DATA_DIR, GROUPS_DIR, } from './config.js'; +import { logger } from './logger.js'; import { validateAdditionalMounts } from './mount-security.js'; import { RegisteredGroup } from './types.js'; -const logger = pino({ - level: process.env.LOG_LEVEL || 'info', - transport: { target: 'pino-pretty', options: { colorize: true } }, -}); - // Sentinel markers for robust output parsing (must match agent-runner) const OUTPUT_START_MARKER = '---NANOCLAW_OUTPUT_START---'; const OUTPUT_END_MARKER = '---NANOCLAW_OUTPUT_END---'; diff --git a/src/index.ts b/src/index.ts index 07702ec..20a6914 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,6 @@ import { exec, execSync } from 'child_process'; import fs from 'fs'; import path from 'path'; -import pino from 'pino'; import makeWASocket, { DisconnectReason, @@ -42,14 +41,10 @@ import { import { startSchedulerLoop } from './task-scheduler.js'; import { NewMessage, RegisteredGroup, Session } from './types.js'; import { loadJson, saveJson } from './utils.js'; +import { logger } from './logger.js'; const GROUP_SYNC_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours -const logger = pino({ - level: process.env.LOG_LEVEL || 'info', - transport: { target: 'pino-pretty', options: { colorize: true } }, -}); - let sock: WASocket; let lastTimestamp = ''; let sessions: Session = {}; diff --git a/src/logger.ts b/src/logger.ts new file mode 100644 index 0000000..2b91492 --- /dev/null +++ b/src/logger.ts @@ -0,0 +1,6 @@ +import pino from 'pino'; + +export const logger = pino({ + level: process.env.LOG_LEVEL || 'info', + transport: { target: 'pino-pretty', options: { colorize: true } }, +}); diff --git a/src/task-scheduler.ts b/src/task-scheduler.ts index 2b25e24..430a290 100644 --- a/src/task-scheduler.ts +++ b/src/task-scheduler.ts @@ -1,7 +1,6 @@ import { CronExpressionParser } from 'cron-parser'; import fs from 'fs'; import path from 'path'; -import pino from 'pino'; import { DATA_DIR, @@ -18,13 +17,9 @@ import { logTaskRun, updateTaskAfterRun, } from './db.js'; +import { logger } from './logger.js'; import { RegisteredGroup, ScheduledTask } from './types.js'; -const logger = pino({ - level: process.env.LOG_LEVEL || 'info', - transport: { target: 'pino-pretty', options: { colorize: true } }, -}); - export interface SchedulerDependencies { sendMessage: (jid: string, text: string) => Promise; registeredGroups: () => Record;