diff --git a/packages/common/interfaces/nest-application-context.interface.ts b/packages/common/interfaces/nest-application-context.interface.ts index 47ec30cad59..11888397a9e 100644 --- a/packages/common/interfaces/nest-application-context.interface.ts +++ b/packages/common/interfaces/nest-application-context.interface.ts @@ -50,7 +50,8 @@ export interface INestApplicationContext { close(): Promise; /** - * Sets custom logger service + * Sets custom logger service. + * Flushes buffered logs if auto flush is on. * @returns {void} */ useLogger(logger: LoggerService | LogLevel[] | false): void; diff --git a/packages/core/nest-application-context.ts b/packages/core/nest-application-context.ts index cfd4e19b667..a61b9b8b051 100644 --- a/packages/core/nest-application-context.ts +++ b/packages/core/nest-application-context.ts @@ -35,6 +35,7 @@ export class NestApplicationContext implements INestApplicationContext { protected isInitialized = false; protected readonly injector = new Injector(); + private shouldFlushLogsOnOverride = false; private readonly activeShutdownSignals = new Array(); private readonly moduleCompiler = new ModuleCompiler(); private shutdownCleanupRef?: (...args: unknown[]) => unknown; @@ -131,12 +132,23 @@ export class NestApplicationContext implements INestApplicationContext { public useLogger(logger: LoggerService | LogLevel[] | false) { Logger.overrideLogger(logger); + + if (this.shouldFlushLogsOnOverride) { + this.flushLogs(); + } } public flushLogs() { Logger.flush(); } + /** + * Define that it must flush logs right after defining a custom logger. + */ + public flushLogsOnOverride() { + this.shouldFlushLogsOnOverride = true; + } + /** * Enables the usage of shutdown hooks. Will call the * `onApplicationShutdown` function of a provider if the diff --git a/packages/core/nest-factory.ts b/packages/core/nest-factory.ts index 702ee9146b8..617b11a9774 100644 --- a/packages/core/nest-factory.ts +++ b/packages/core/nest-factory.ts @@ -142,6 +142,9 @@ export class NestFactoryStatic { const context = this.createNestInstance( new NestApplicationContext(container, [], root), ); + if (this.autoFlushLogs) { + context.flushLogsOnOverride(); + } return context.init(); }