dynamic dir and names, log rotation

This commit is contained in:
Gsk54
2022-12-26 15:08:51 +01:00
parent 665c04cef9
commit 2539c27ca2
10 changed files with 620 additions and 19 deletions

View File

@@ -2,6 +2,8 @@ import { Module } from '@nestjs/common';
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { UserController } from './logger/adapters/primaries/user.controller';
import { WinstonModule } from 'nest-winston';
import * as winston from 'winston';
@Module({
imports: [
@@ -19,6 +21,10 @@ import { UserController } from './logger/adapters/primaries/user.controller';
}),
inject: [ConfigService],
}),
WinstonModule.forRoot({
levels: winston.config.syslog.levels,
transports: [],
}),
],
controllers: [UserController],
providers: [],

View File

@@ -0,0 +1,10 @@
export enum level {
emerg = 'emerg',
alert = 'alert',
crit = 'crit',
error = 'error',
warning = 'warning',
notice = 'notice',
info = 'info',
debug = 'debug',
}

View File

@@ -0,0 +1,19 @@
import { TransportOptions } from './transport.options';
import * as winston from 'winston';
import { level } from './level.enum';
import 'winston-daily-rotate-file';
export default function loggerOptions(
dirname: string,
level: level,
filename: string,
) {
const transportOptions = new TransportOptions(dirname, level, filename);
const transport = new winston.transports.DailyRotateFile({
...transportOptions,
});
return {
levels: winston.config.syslog.levels,
transports: [transport],
};
}

View File

@@ -0,0 +1,12 @@
import * as winston from 'winston';
export default function filter(level) {
return winston.format((info) => {
if (typeof level === 'string') {
if (info.level === level) return info;
} else if (Array.isArray(level)) {
if (level.includes(info.level)) return info;
}
return false;
})();
}

View File

@@ -0,0 +1,29 @@
import filter from './loglevel.filter';
import * as winston from 'winston';
import { level as levelEnum } from './level.enum';
export class TransportOptions {
extension = '.log';
maxSize = '1m';
maxFiles = '60';
zippedArchive = true;
filename = 'info';
level = levelEnum.info;
dirname = 'logs';
format: winston.Logform.Format = winston.format.combine(
filter(this.level),
winston.format.timestamp(),
winston.format.json(),
);
constructor(dir: string, level: levelEnum, filename: string) {
this.level = level;
this.filename = filename;
this.dirname += '/' + dir;
this.format = winston.format.combine(
filter(this.level),
winston.format.timestamp(),
winston.format.json(),
);
}
}

View File

@@ -1,14 +1,43 @@
import { RabbitSubscribe } from '@golevelup/nestjs-rabbitmq';
import { Controller } from '@nestjs/common';
import { Controller, Inject } from '@nestjs/common';
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
import { Logger } from 'winston';
import { level } from './logger/level.enum';
import loggerOptions from './logger/logger';
@Controller()
export class UserController {
constructor(
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger,
) {}
@RabbitSubscribe({
exchange: 'logging',
routingKey: 'user.create.*',
queue: 'logging-user',
routingKey: 'user.create.info',
queue: 'logging-user-create-info',
})
public async userCreatedHandler(message: string) {
console.log(JSON.parse(message));
public async userCreatedInfoHandler(message: string) {
this.logger.configure(loggerOptions('user', level.info, 'info'));
this.logger.info(JSON.parse(message));
}
@RabbitSubscribe({
exchange: 'logging',
routingKey: 'user.create.warning',
queue: 'logging-user-create-warning',
})
public async userCreatedWarningHandler(message: string) {
this.logger.configure(loggerOptions('user', level.warning, 'warning'));
this.logger.warning(JSON.parse(message));
}
@RabbitSubscribe({
exchange: 'logging',
routingKey: 'user.create.crit',
queue: 'logging-user-create-crit',
})
public async userCreatedCriticalHandler(message: string) {
this.logger.configure(loggerOptions('user', level.crit, 'critical'));
this.logger.crit(JSON.parse(message));
}
}