日志类型,功能分类,记录位置
- 日志作用
- 记录错误并定位问题
- 日志需要怎么定位问题
- 什么时间发生的
- 发生了什么事情
- 错误是什么
- 日志等级(类型)
- 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=日志