@@ -7,10 +7,6 @@ import { LoggingMessageNotification } from "@modelcontextprotocol/sdk/types.js";
77export type LogLevel = LoggingMessageNotification [ "params" ] [ "level" ] ;
88
99abstract class LoggerBase {
10- async initialize ( ) : Promise < void > {
11- return Promise . resolve ( ) ;
12- }
13-
1410 abstract log ( level : LogLevel , id : MongoLogId , context : string , message : string ) : void ;
1511
1612 info ( id : MongoLogId , context : string , message : string ) : void {
@@ -53,17 +49,15 @@ class ConsoleLogger extends LoggerBase {
5349}
5450
5551class DiskLogger extends LoggerBase {
56- private logWriter ?: MongoLogWriter ;
57-
58- constructor ( private logPath : string ) {
52+ private constructor ( private logWriter : MongoLogWriter ) {
5953 super ( ) ;
6054 }
6155
62- async initialize ( ) : Promise < void > {
63- await fs . mkdir ( this . logPath , { recursive : true } ) ;
56+ static async fromPath ( logPath : string ) : Promise < DiskLogger > {
57+ await fs . mkdir ( logPath , { recursive : true } ) ;
6458
6559 const manager = new MongoLogManager ( {
66- directory : this . logPath ,
60+ directory : logPath ,
6761 retentionDays : 30 ,
6862 onwarn : console . warn ,
6963 onerror : console . error ,
@@ -73,17 +67,15 @@ class DiskLogger extends LoggerBase {
7367
7468 await manager . cleanupOldLogFiles ( ) ;
7569
76- this . logWriter = await manager . createLogWriter ( ) ;
70+ const logWriter = await manager . createLogWriter ( ) ;
71+
72+ return new DiskLogger ( logWriter ) ;
7773 }
7874
7975 log ( level : LogLevel , id : MongoLogId , context : string , message : string ) : void {
8076 message = redact ( message ) ;
8177 const mongoDBLevel = this . mapToMongoDBLogLevel ( level ) ;
8278
83- if ( ! this . logWriter ) {
84- throw new Error ( "DiskLogger is not initialized" ) ;
85- }
86-
8779 this . logWriter [ mongoDBLevel ] ( "MONGODB-MCP" , id , context , message ) ;
8880 }
8981
@@ -136,12 +128,6 @@ class CompositeLogger extends LoggerBase {
136128 this . loggers = [ ...loggers ] ;
137129 }
138130
139- async initialize ( ) : Promise < void > {
140- for ( const logger of this . loggers ) {
141- await logger . initialize ( ) ;
142- }
143- }
144-
145131 setLoggers ( ...loggers : LoggerBase [ ] ) : void {
146132 if ( loggers . length === 0 ) {
147133 throw new Error ( "At least one logger must be provided" ) ;
@@ -159,7 +145,11 @@ class CompositeLogger extends LoggerBase {
159145const logger = new CompositeLogger ( ) ;
160146export default logger ;
161147
162- export async function initializeLogger ( server : McpServer , logPath : string ) : Promise < void > {
163- logger . setLoggers ( new McpLogger ( server ) , new DiskLogger ( logPath ) ) ;
164- await logger . initialize ( ) ;
148+ export async function initializeLogger ( server : McpServer , logPath : string ) : Promise < LoggerBase > {
149+ const diskLogger = await DiskLogger . fromPath ( logPath ) ;
150+ const mcpLogger = new McpLogger ( server ) ;
151+
152+ logger . setLoggers ( mcpLogger , diskLogger ) ;
153+
154+ return logger ;
165155}
0 commit comments