NESTJS 中的日志系统

NESTJS 中的日志系统winston

背景:
	需在现有TS项目中新增log系统, 用于记录请求以及相应信息,因为对ts的学习不是很深入,所以记录过程以供复盘.

log模块选型:
	社区的主流日志实现有:
		log4js, Winston, pino
		简单压测结果为 log4js>winston>pino>bunyan
	综合网络教程及star数, 选择 log4js
	
需注意点:
	日志格式化输出, 信息易读性
	日志文件切割存储, 定时清理, 减少内存占用
	模块包可配置化
	日志优先级
	
参考链接
    https://www.npmjs.com/package/log4js 	// 官网
    https://cloud.tencent.com/developer/article/1610017
    https://blog.csdn.net/huzzzz/article/details/103191803/

简易流程

打印日志的分级
日志文件的输出
日志模块的配置文件
路由请求都需要记录, 利用中间件记录请求

安装

winston的安装

npm install --save nest-winston winston
npm install winston-daily-rotate-file

log4js的安装

https://www.npmjs.com/package/log4js

npm install log4js
npm add log4js stacktrace-js -S

使用

设置日志的输出 appender

我们可以通过 log4js.configure 来设置我们想要的 appender。

var log4js = require('log4js');
log4js.configure({
  appenders: [{
    type: 'file',
    filename: 'default.log'
  }]
})
var logger = log4js.getLogger('custom-appender');
logger.debug("Time:", new Date());

利用中间件定义接口数据 中间件

请求url过来时, 需要记录并写入log文件

// 1. 创建中间件文件
 	nest g middleware logger middleware
	在文件中定义 日志等信息,用于全局使用
// 2. 在 app.module 文件中使用
	全局中间件 只能使用函数式中间件
// 3. 在main.ts 中注册
	app.use(logger);	// 全局中间件的注册

参考链接:
	https://blog.csdn.net/qq_42852301/article/details/103295541

利用拦截器获取出参拦截器

入参可以使用中间件获取,出参信息需要使用 interceptors (拦截器)进行获取, 所有的参数都会经过这里进行处理
// 1. 创建拦截器
	nest g interceptor transform interceptor
// 2. 编写出参打印逻辑
	intercept 接受两个参数,当前的上下文和传递函数,这里还使用了 pipe(管道)
// 3. 使用,在main 注册
	useGlobalInterceptors 调用全局拦截器:

捕捉异常处理 过滤器

开发时,会有各种的bug, 异常的捕获与抛出也需要进行记录,

// 1. 创建
	nest g filter http-exception filter	// http相关的异常
    nest g filter any-exception filter	// 项目中所有的异常

集成typemysql

想将 typeorm的日志 也集成写入log4js中,参考大佬文章 [https://blog.csdn.net/huzzzz/article/details/103191803/]
以及typeorm的官方文档 [https://typeorm.biunav.com/zh/logging.html#%E6%9B%B4%E6%94%B9%E9%BB%98%E8%AE%A4%E8%AE%B0%E5%BD%95%E5%99%A8]

直接在配置项更改即可 

import { createConnection } from "typeorm";
import { MyCustomLogger } from "./logger/MyCustomLogger";

createConnection({
  name: "mysql",
  type: "mysql",
  host: "localhost",
  port: 3306,
  username: "test",
  password: "test",
  database: "test",
  logger: new MyCustomLogger()
});

出现的一些问题解决

// Cannot find name 'require'. Do you need to install type definitions for node
	- npm install @types/node --save-dev

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值