winston
npm install nest-winston winston winston-daily-rotate-file
npm install chalk:颜色标识
配置
# winston-level
LOG_LEVEL="debug"
import { ConfigService } from "@nestjs/config"
import chalk from "chalk";
import { WinstonModuleOptions } from "nest-winston";
import { format, transports } from "winston";
import "winston-daily-rotate-file";
export const winstonConfig = {
inject: [ConfigService],
useFactory: (configService: ConfigService) => {
const transportsList: WinstonModuleOptions["transports"] = [
new transports.DailyRotateFile({
level: "error",
dirname: `logs`,
filename: `%DATE%-error.log`,
datePattern: "YYYY-MM-DD",
maxSize: "20m",
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
format.printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
})
)
}),
new transports.DailyRotateFile({
level: configService.get('LOG_LEVEL') || 'debug',
dirname: `logs`,
filename: `%DATE%-combined.log`,
datePattern: "YYYY-MM-DD",
maxSize: "20m",
format: format.combine(
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
format((info) => {
if (info.level === "error") {
return false;
}
return info;
})(),
format.printf(({ level, message, timestamp }) => {
return `${timestamp} ${level}: ${message}`;
})
)
})
];
if (process.env.NODE_ENV === "development") {
transportsList.push(new transports.Console(
{
level: configService.get('LOG_LEVEL') || 'debug',
format: format.combine(
format.colorize(),
format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss',
}),
format.printf(({ level, message, timestamp }) => {
const appStr = chalk.green(`[WINSTON]`);
return `${appStr} ${timestamp} ${level} ${message} `;
})
),
}
));
}
return {
transports: transportsList
};
}
}
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: `.env.${process.env.NODE_ENV || 'development'}`,
}),
WinstonModule.forRootAsync(winstonConfig),
打印日志
export class HttpExceptionFilter implements ExceptionFilter {
constructor(@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger) { }
this.logger.error(message);