Nest 使用 Winston 日志
安装
bash
pnpm install --save nest-winston winston
pnpm install winston-daily-rotate-file获取真实 IP
bash
pnpm install request-ip -S全局使用
- 在
main.ts中使用绑定到请求信息中 ip 字段
bash
import * as requestIp from "request-ip";
// 获取真实 ip 存储到用户请求信息中得IP字段
app.use(requestIp.mw({ attributeName: "ip" }));创建一个日志动态模块
global.winston.module.ts
设置成了全局模块,所以其他模块都可以使用
ts
import { DynamicModule, Global, Module } from "@nestjs/common";
import { WinstonModule, utilities } from "nest-winston";
import * as winston from "winston";
import "winston-daily-rotate-file";
@Global()
@Module({})
export class GlobalWinstonModule {
static forRoot(): DynamicModule {
return {
module: GlobalWinstonModule,
imports: [
// 其他 模块 LoginModule,
WinstonModule.forRoot({
transports: [
new winston.transports.Console({
level: "info",
format: winston.format.combine(
winston.format.timestamp(),
utilities.format.nestLike()
),
}),
new winston.transports.DailyRotateFile({
level: "error",
dirname: process.env.APP_LOG,
filename: "error-%DATE%.log",
datePattern: "YYYY-MM-DD",
zippedArchive: true, // 是否通过压缩的方式归档被轮换的日志文件。
maxSize: "10m",
maxFiles: "14d",
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
}),
new winston.transports.DailyRotateFile({
level: "info",
dirname: process.env.APP_LOG,
filename: "info-%DATE%.log",
datePattern: "YYYY-MM-DD",
zippedArchive: true, // 是否通过压缩的方式归档被轮换的日志文件。
maxSize: "10m", // 设置日志文件的最大大小,m 表示 mb 。
maxFiles: "14d", // 保留日志文件的最大天数,此处表示自动删除超过 14 天的日志文件。
// 记录时添加时间戳信息
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
}),
],
}),
],
controllers: [],
providers: [],
exports: [],
};
}
}- app.module.ts 引入动态模块
ts
import { GlobalWinstonModule } from "./common/global.winston.module";
import { Module } from "@nestjs/common";
import configuration from "./config/index";
import { ConfigModule } from "@nestjs/config";
@Module({
imports: [GlobalWinstonModule.forRoot()],
controllers: [],
providers: [],
})
export class AppModule {}