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 记录该业务下的日志。