Nestjs框架: 日志和官方日志

发布于:2024-02-25 ⋅ 阅读:(72) ⋅ 点赞:(0)

日志类型,功能分类,记录位置

  • 日志作用
    • 记录错误并定位问题
  • 日志需要怎么定位问题
    • 什么时间发生的
    • 发生了什么事情
    • 错误是什么
  • 日志等级(类型)
    • Log: 通用日志,按需进行记录(打印)
    • Warning: 警告日志,比如:尝试多次进行数据库操作
    • Error: 严重日志,比如:数据库异常
    • Debug: 调试日志,比如:加载数据库日志
    • Verbose: 详细日志,所有操作与详细信息(非必要不打印)
  • 日志分类
    • 错误日志 -> 方便定位问题,给用户友好的提示
    • 调试日志 -> 方便开发
    • 请求日志 -> 记录敏感行为
  • 日志记录位置
    • 控制台日志 -> 方便监看 (调试用)
    • 文件日志 -> 方便回溯与追踪 (24小时滚动)
    • 数据库日志 -> 敏感操作、敏感数据记录

日志等级的使用


1)分环境

  • dev: log, error, warning, debug, verbose
  • staging: log, error, warning
  • prod: log, error, api

2 )位置

  • log: console
  • error: 文件/db
  • warning: console/文件
  • debug: console/文件
  • verbose: console
  • api: console/db

3 ) 在Nestjs中记录日志

Log Error Warning Debug Verbose API
Dev
Staging
Prod
位置 console 文件/DB console/文件 console/文件 console console/DB

Nestjs 内置日志模块:Logger


1 )如果项目中,使用 typeORM,需要关闭,日志开关如下

// app.module.ts
TypeOrmModule.forRootAsync({
  useFactory: () => ({
    // logging: process.env.NODE_ENV === 'development'
    logging: false // 这里先关闭
  })
})

2 )关闭整个程序的日志

// main.ts
async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    // logger: ['error', 'warn'], // 这里设置日志等级,只在该等级下的日志才会打印
    logger: false // 这里关闭整个nestjs的日志
  });
  app.setGlobalPrefix('api/v1');
  await app.listen(3000);
}
bootstrap();

3 )自定义输出

// main.ts
import { Logger } from '@nestjs/common'

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    // logger: ['error', 'warn'], // 这里设置日志等级,只在该等级下的日志才会打印
    logger: true // 这个就是默认值,和不写一样
  });
  app.setGlobalPrefix('api/v1');
  await app.listen(3000);
  Logger.log('app 启动在 3000') // 绿色
  Logger.warn('app 启动在 3000') // 黄色
  Logger.error('app 启动在 3000') // 红色
}
bootstrap();

4 )在控制器中使用

import { Logger } from '@nestjs/common'

@Controller('user')
export class UserController {
  private logger = new Logger(UserController.name)
  constructor() {
    this.logger.log('init') // 类似这样,在需要的地方调用
  }
}
  • 以上,Logger 需要在每个controller中实例化,才能使用,用于调试,所有日志信息打印在console上
  • 如果没有一些记录日志到文件的使用场景,使用官方内置的模块是足够了
  • 更多参考:https://docs.nestjs.cn/10/techniques?id=日志

网站公告

今日签到

点亮在社区的每一天
去签到