返回文章列表 →

Note

日志

NestJS内置日志Looger

发布于 更新于

Logger

NestJS 给业务代码提供的日志入口。用于日志输出

构造函数

参数和返回值
new Logger(
  context: string,
  options?: {
    timestamp?: boolean
  }
)
参数 类型 是否必填 含义
context string 否 日志上下文,通常写当前类名
options { timestamp?: boolean } 否 Logger 配置
options.timestamp boolean 否 是否显示与上一条日志之间的时间差
示例
private readonly logger = new Logger(UserService.name); // 假设类名为'UserService'
// 输出:[Nest] 12345 - 08/21/2026, 17:40:00 LOG [UserService] 查询用户
// [Nest] 为前缀prefix,也可以修改
// [UserService]为传入的context。通常传递当前类等具有身份标识的信息,这样可以知道这条日志是谁产生的

常用API

级别 用途 严重程度
fatal 致命错误 高
error 错误 ⬇️
warn 警告 ⬇️
log 普通运行信息 ⬇️
debug 调试信息 ⬇️
verbose 极详细运行信息 低

logger.log()

普通运行信息

参数和返回值
logger.log(
  message: any,
  context?: string,
  optionalParams: any[]
): void
参数 类型 含义
message any 要记录的信息,可以是字符串、对象等
context string 可选,指定日志属于哪个上下文
optionalParams any[] 可选附加信息
示例
this.logger.log(`用户创建成功,userId=${user.id}`);

logger.warn()

警告信息。参数和返回值同 logger.log()

logger.error()

程序运行过程中发生的错误

参数和返回值
logger.error(
  message: any,
  stack?: string,
  context?: string
): void
参数 类型 含义
message any 错误描述
stack string 可选,错误调用堆栈
context string 可选,日志上下文
示例
catch (error) {
  this.logger.error(
    '创建用户失败',
    error instanceof Error ? error.stack : undefined,
  );

  throw new InternalServerErrorException('创建用户失败');
}

logger.debug()

开发、调试阶段需要看的详细信息。参数和返回值同 logger.log()

logger.verbose()

输出比 debug 还详细、更啰嗦的日志。参数和返回值同 logger.log()

示例

@Injectable()
export class UserService {
  // 创建logger实例
  private readonly logger = new Logger(UserService.name);

  constructor(private readonly userRepository: UserRepository) {}

  async findOne(id: number) {
    this.logger.debug(`查询用户 id=${id}`);

    try {
      const user = await this.userRepository.findOne(id);

      if (!user) {
        this.logger.warn(`用户不存在 id=${id}`);
        return null;
      }

      this.logger.log(`用户查询成功 id=${id}`);

      return user;
    } catch (error) {
      this.logger.error(
        "查询用户失败",
        error instanceof Error ? error.stack : undefined,
      );

      throw new InternalServerErrorException("查询用户失败");
    }
  }
}

为什么不是直接使用 console.log()?

Nest Logger 会提供很多统一能力,如:日志级别、context、统一格式、颜色、时间、JSON等等

ConsoleLogger

默认的 Logger 实例。也可以用于生成日志,但它比 Logger 多控制日志输出格式的参数,它定位是用于修改整个应用的日志表现,业务代码中还是使用 Logger 输出日志。

构造函数

参数和返回值
new ConsoleLogger(
  context: string,
  options: ConsoleLoggerOptions
)
参数 类型 含义
context string 日志上下文
options object 配置
ConsoleLoggerOptions
interface ConsoleLoggerOptions {
  // 指定允许输出哪些日志等级
  logLevels?: LogLevel[];
  //   显示时间戳
  timestamp?: boolean;
  // 日志前缀。默认为Nest
  prefix?: string;
  // 把日志信息以json形式展示
  json?: boolean;
  // 是否启用终端日志颜色
  colors?: boolean;
  // 日志上下文
  context?: string;
  // ...
}

常用API

同 logger

示例

import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { ConsoleLogger } from "@nestjs/common";

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    // Nest 整个应用不再使用默认 Logger 配置,而使用这里提供的 ConsoleLogger
    logger: new ConsoleLogger({
      prefix: "My-Server",

      colors: true,

      timestamp: true,

      logLevels: ["log", "warn", "error", "debug"],
    }),
  });

  await app.listen(3000);
}

bootstrap();

日志使用

在 main.ts 中配置 ConsoleLogger 设置全局日志格式,在 Service 中使用 Logger 记录该业务下的日志。