目的
主要是想将日志不仅仅是在控制台输出,也要输出到一个文件里,方便上线后的查看
步骤
安装
我们这边主要使用了 nest-winston
npm install nest-winston winston --save
配置 app.module.ts
import { utilities as nestWinstonModuleUtilities, WinstonModule } from 'nest-winston';
import * as winston from 'winston';
const customTimestamp = () => {
return new Date().toLocaleString('zh-CN', {
timeZone: 'Asia/Shanghai', // 指定时区
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
});
};
@Module({
imports: [
WinstonModule.forRoot({
level: 'info', // 仅当 info.level 小于或等于此级别时才记录
format: winston.format.combine(
winston.format.timestamp({ format: customTimestamp }),
winston.format.ms(),
// 为错误日志添加堆栈信息。这对于调试和错误追踪非常有用:
winston.format.errors({ stack: true }),
winston.format.json(),
),
transports: [
new winston.transports.Console({
format: winston.format.combine(
winston.format.timestamp(),
winston.format.ms(),
nestWinstonModuleUtilities.format.nestLike('MyApp', {
colors: true,
prettyPrint: true,
processId: true,
appName: true,
}),
),
}),
new winston.transports.File({
filename: 'combined.log', // 日志文件的名称
dirname: 'logs', // 日志文件存储的目录(相对于项目根目录或绝对路径)
}),
// warn
new winston.transports.File({
filename: 'warn.log',
dirname: 'logs',
level: 'warn', // 日志级别
}),
// error
new winston.transports.File({
filename: 'error.log',
dirname: 'logs',
level: 'error',
}),
],
});
]
})
new winston.transports.Console 配置控制台上的打印信息
new winston.transports.File 配置生成文件的打印信息
如何使用
上面已经配置完成,那么如何使用?
xxx.controller.ts
import { WINSTON_MODULE_PROVIDER } from 'nest-winston';
import { Logger } from 'winston';
@Controller('xxx')
export class XxxController {
constructor(
@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger
){}
@Get('abc')
async getAbc(@Query params: any, @Req req: Request) {
this.logger.info('测试');
}
}