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

@@ -1,14 +1,14 @@
import { Global, Module } from '@nestjs/common'; import { Global, Module } from '@nestjs/common';
import { ConfigModule } from '../config'; import { ConfigModule } from '../config';
import { loggerProvider } from './service'; import { AFFiNELogger } from './service';
@Global() @Global()
@Module({ @Module({
imports: [ConfigModule], imports: [ConfigModule],
providers: [loggerProvider], providers: [AFFiNELogger],
exports: [loggerProvider], exports: [AFFiNELogger],
}) })
export class LoggerModule {} export class LoggerModule {}
export { AFFiNELogger } from './logger'; export { AFFiNELogger } from './service';

View File

@@ -1,30 +1,6 @@
import { LoggingWinston } from '@google-cloud/logging-winston'; import { ConsoleLogger, Injectable, Scope } from '@nestjs/common';
import { ConsoleLogger, LoggerService, Provider, Scope } from '@nestjs/common';
import { createLogger, transports } from 'winston';
import { Config } from '../config'; @Injectable({
import { AFFiNELogger } from './logger';
export const loggerProvider: Provider<LoggerService> = {
provide: AFFiNELogger,
useFactory: (config: Config) => {
if (config.NODE_ENV !== 'production') {
return new ConsoleLogger();
}
const loggingWinston = new LoggingWinston();
// Create a Winston logger that streams to Cloud Logging
const instance = createLogger({
level: config.affine.stable ? 'log' : 'verbose',
transports: [
new transports.Console(),
// Add Cloud Logging
loggingWinston,
],
});
return new AFFiNELogger(instance);
},
inject: [Config],
// use transient to make sure the logger is created for each di context
// to make the `setContext` method works as expected
scope: Scope.TRANSIENT, scope: Scope.TRANSIENT,
}; })
export class AFFiNELogger extends ConsoleLogger {}

View File

@@ -1,8 +1,9 @@
import { FactoryProvider, Logger } from '@nestjs/common'; import { FactoryProvider } from '@nestjs/common';
import { createTransport, Transporter } from 'nodemailer'; import { createTransport, Transporter } from 'nodemailer';
import SMTPTransport from 'nodemailer/lib/smtp-transport'; import SMTPTransport from 'nodemailer/lib/smtp-transport';
import { Config } from '../config'; import { Config } from '../config';
import { AFFiNELogger } from '../logger';
export const MAILER_SERVICE = Symbol('MAILER_SERVICE'); export const MAILER_SERVICE = Symbol('MAILER_SERVICE');
@@ -14,9 +15,9 @@ export const MAILER: FactoryProvider<
Transporter<SMTPTransport.SentMessageInfo> | undefined Transporter<SMTPTransport.SentMessageInfo> | undefined
> = { > = {
provide: MAILER_SERVICE, provide: MAILER_SERVICE,
useFactory: (config: Config) => { useFactory: (config: Config, logger: AFFiNELogger) => {
if (config.mailer) { if (config.mailer) {
const logger = new Logger('Mailer'); logger.setContext('Mailer');
const auth = config.mailer.auth; const auth = config.mailer.auth;
if (auth && auth.user && !('pass' in auth)) { if (auth && auth.user && !('pass' in auth)) {
logger.warn( logger.warn(
@@ -29,5 +30,5 @@ export const MAILER: FactoryProvider<
return undefined; return undefined;
} }
}, },
inject: [Config], inject: [Config, AFFiNELogger],
}; };

View File

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