fix(server): disable winston in seflhost instance (#9585)

This commit is contained in:
Brooooooklyn
2025-01-08 14:47:42 +00:00
parent 5842d45ab1
commit fd26b72255
7 changed files with 54 additions and 37 deletions

View File

@@ -3,11 +3,12 @@ import './config';
import { Global } from '@nestjs/common';
import { Plugin } from '../registry';
import { GCloudLogging } from './logging';
import { GCloudMetrics } from './metrics';
@Global()
@Plugin({
name: 'gcloud',
imports: [GCloudMetrics],
imports: [GCloudMetrics, GCloudLogging],
})
export class GCloudModule {}

View File

@@ -0,0 +1,13 @@
import { Global } from '@nestjs/common';
import { OptionalModule } from '../../../base';
import { loggerProvider } from './service';
@Global()
@OptionalModule({
if: config => config.metrics.enabled,
overrides: [loggerProvider],
})
export class GCloudLogging {}
export { AFFiNELogger } from './logger';

View File

@@ -0,0 +1,17 @@
import { WinstonLogger } from 'nest-winston';
export class AFFiNELogger extends WinstonLogger {
override error(
message: any,
trace?: Error | string | unknown,
context?: string
) {
if (trace && trace instanceof Error) {
super.error(message, trace.stack, context);
} else if (typeof trace === 'string' || trace === undefined) {
super.error(message, trace, context);
} else {
super.error(message, undefined, context);
}
}
}

View File

@@ -0,0 +1,26 @@
import { LoggingWinston } from '@google-cloud/logging-winston';
import { LoggerService, Provider, Scope } from '@nestjs/common';
import { createLogger, transports } from 'winston';
import { AFFiNELogger as LoggerProvide } from '../../../base/logger';
import { AFFiNELogger } from './logger';
export const loggerProvider: Provider<LoggerService> = {
provide: LoggerProvide,
useFactory: () => {
const loggingWinston = new LoggingWinston();
// Create a Winston logger that streams to Cloud Logging
const instance = createLogger({
level: 'log',
transports: [
new transports.Console(),
// Add Cloud Logging
loggingWinston,
],
});
return new AFFiNELogger(instance);
},
// use transient to make sure the logger is created for each di context
// to make the `setContext` method works as expected
scope: Scope.TRANSIENT,
};