mirror of
https://gitlab.com/mobicoop/v3/service/logger.git
synced 2026-01-10 14:52:39 +00:00
dynamic dir and names, log rotation
This commit is contained in:
@@ -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: [],
|
||||
|
||||
10
src/modules/logger/adapters/primaries/logger/level.enum.ts
Normal file
10
src/modules/logger/adapters/primaries/logger/level.enum.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
export enum level {
|
||||
emerg = 'emerg',
|
||||
alert = 'alert',
|
||||
crit = 'crit',
|
||||
error = 'error',
|
||||
warning = 'warning',
|
||||
notice = 'notice',
|
||||
info = 'info',
|
||||
debug = 'debug',
|
||||
}
|
||||
19
src/modules/logger/adapters/primaries/logger/logger.ts
Normal file
19
src/modules/logger/adapters/primaries/logger/logger.ts
Normal 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],
|
||||
};
|
||||
}
|
||||
@@ -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;
|
||||
})();
|
||||
}
|
||||
@@ -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(),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user