Skip to content

日志 第三方 PINO

PINO 第三方依赖

安装依赖

bash
npm install nestjs-pino -S

配置

  • 在 app.modules.ts 中配置
ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { LoggerModule } from "nestjs-pino";
@Module({
  imports: [LoggerModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  • 举例 在 app.controller.ts 中使用
ts
import { Controller, Get } from "@nestjs/common";
import { AppService } from "./app.service";
import { Logger } from "nestjs-pino";
@Controller()
export class AppController {
  constructor(
    private readonly appService: AppService,
    private readonly logger: Logger
  ) {}

  @Get()
  getHello(): string {
    this.logger.log("Hello World!");
    return this.appService.getHello();
  }
}

美化插件

  • 安装完插件
bash
pnpm i pino-pretty -S
  • 找到引入 pino 的部分,传递参数
ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { LoggerModule } from "nestjs-pino";
@Module({
  imports: [
    LoggerModule.forRoot({
      pinoHttp: {
        // Use pretty-printed JSON
        transport: {
          target: "pino-pretty",
          options: {
            colorize: true,
          },
        },
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

这样返回的就不是个字符串了,而是美化过的 json 格式

pino-roll(生产环境)

ts
pnpm i pino-roll -S

使用

ts
import { Module } from "@nestjs/common";
import { AppController } from "./app.controller";
import { AppService } from "./app.service";
import { LoggerModule } from "nestjs-pino";
import { mkdir } from "fs";
import { join } from "path";
@Module({
  imports: [
    LoggerModule.forRoot({
      pinoHttp: {
        // Use pretty-printed JSON
        transport: {
          targets: [
            {
              level: "info",
              target: "pino-pretty",
              options: {
                colorize: true,
              },
            },
            {
              level: "info",
              target: "pino-roll",
              options: {
                file: join("log", "log.txt"), // 路径
                frequency: "daily", // 日期
                mkdir: true,
                size: "0.1k", // 文件大小 k为单位
              },
            },
          ],
        },
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}