Skip to content

Commit 13f85e9

Browse files
committed
refactor: Enhance Logger class with improved configuration and formatting options
1 parent a50c5e8 commit 13f85e9

File tree

1 file changed

+54
-48
lines changed

1 file changed

+54
-48
lines changed

src/logging.ts

Lines changed: 54 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -3,85 +3,91 @@ import fs from 'node:fs'
33
import path from 'node:path'
44
import { createLogger, format, transports } from 'winston'
55

6-
const { combine, timestamp, label, printf } = format
6+
const { combine, timestamp, label, printf, colorize, splat } = format
77

8-
let MCP_USE_DEBUG = 0
8+
export type LogLevel = 'error' | 'warn' | 'info' | 'http' | 'verbose' | 'debug' | 'silly'
99

10-
const debugEnv = process.env.DEBUG?.toLowerCase()
11-
if (debugEnv === '2') {
12-
MCP_USE_DEBUG = 2
10+
interface LoggerOptions {
11+
level?: LogLevel
12+
console?: boolean
13+
file?: string
1314
}
14-
else if (debugEnv === '1') {
15-
MCP_USE_DEBUG = 1
15+
16+
const DEFAULT_LOGGER_NAME = 'mcp-use'
17+
18+
function resolveLevel(env: string | undefined): LogLevel {
19+
switch (env?.trim()) {
20+
case '2':
21+
return 'debug'
22+
case '1':
23+
return 'info'
24+
default:
25+
return 'warn'
26+
}
1627
}
1728

18-
const defaultFormat = printf(({ level, message, label, timestamp }) =>
19-
`${timestamp} [${label}] ${level.toUpperCase()}: ${message}`,
20-
)
29+
const defaultFormatter = printf(({ level, message, label, timestamp }) => {
30+
return `${timestamp} [${label}] ${level.toUpperCase()}: ${message}`
31+
})
2132

2233
export class Logger {
23-
private static loggers: Record<string, WinstonLogger> = {}
34+
private static instances: Record<string, WinstonLogger> = {}
2435

25-
public static getLogger(name: string = 'mcp_use'): WinstonLogger {
26-
if (!this.loggers[name]) {
27-
this.loggers[name] = createLogger({
28-
level: 'warn',
36+
public static get(name: string = DEFAULT_LOGGER_NAME): WinstonLogger {
37+
if (!this.instances[name]) {
38+
this.instances[name] = createLogger({
39+
level: resolveLevel(process.env.DEBUG),
2940
format: combine(
41+
colorize(),
42+
splat(),
3043
label({ label: name }),
3144
timestamp(),
32-
defaultFormat,
45+
defaultFormatter,
3346
),
3447
transports: [],
3548
})
3649
}
37-
return this.loggers[name]
50+
51+
return this.instances[name]
3852
}
3953

40-
public static configure(
41-
level?: string,
42-
toConsole: boolean = true,
43-
toFile?: string,
44-
): void {
45-
const root = this.getLogger()
46-
47-
if (!level) {
48-
level
49-
= MCP_USE_DEBUG === 2
50-
? 'debug'
51-
: MCP_USE_DEBUG === 1 ? 'info' : 'warn'
52-
}
53-
root.level = level
54+
public static configure(options: LoggerOptions = {}): void {
55+
const { level, console = true, file } = options
56+
const resolvedLevel = level ?? resolveLevel(process.env.DEBUG)
57+
58+
const root = this.get()
59+
60+
root.level = resolvedLevel
5461

5562
root.clear()
5663

57-
if (toConsole) {
64+
if (console) {
5865
root.add(new transports.Console())
5966
}
6067

61-
if (toFile) {
62-
const dir = path.dirname(toFile)
63-
if (dir && !fs.existsSync(dir)) {
68+
if (file) {
69+
const dir = path.dirname(path.resolve(file))
70+
if (!fs.existsSync(dir)) {
6471
fs.mkdirSync(dir, { recursive: true })
6572
}
66-
root.add(new transports.File({ filename: toFile }))
73+
root.add(new transports.File({ filename: file }))
6774
}
6875
}
6976

70-
public static setDebug(debugLevel: number = 2): void {
71-
MCP_USE_DEBUG = debugLevel
77+
public static setDebug(enabled: boolean | 0 | 1 | 2): void {
78+
let level: LogLevel
79+
if (enabled === 2 || enabled === true)
80+
level = 'debug'
81+
else if (enabled === 1)
82+
level = 'info'
83+
else level = 'warn'
7284

73-
process.env.LANGCHAIN_VERBOSE = debugLevel >= 1 ? 'true' : 'false'
74-
75-
const newLevel
76-
= debugLevel === 2
77-
? 'debug'
78-
: debugLevel === 1 ? 'info' : 'warn'
79-
Object.values(this.loggers).forEach((log) => {
80-
log.level = newLevel
85+
Object.values(this.instances).forEach((logger) => {
86+
logger.level = level
8187
})
88+
process.env.DEBUG = enabled ? (enabled === true ? '2' : String(enabled)) : '0'
8289
}
8390
}
8491

8592
Logger.configure()
86-
87-
export const logger = Logger.getLogger()
93+
export const logger = Logger.get()

0 commit comments

Comments
 (0)