nest.js使用nest-winston日志一

nest-winston文档

nest-winston - npm

参考:nestjs中winston日志模块使用 - 浮的blog - SegmentFault 思否

安装

cnpm install --save nest-winston winstoncnpm install winston-daily-rotate-file

在main.ts中

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ResponseInterceptor } from './common/response.interceptor'
import { HttpExceptionFilter } from './common/http-exception.filter';
import { createLogger } from 'winston';
import * as winston from 'winston';
import { WinstonModule, utilities, } from 'nest-winston'
import 'winston-daily-rotate-file';async function bootstrap() {//日志const instance = createLogger({transports: [new winston.transports.Console({level: 'info',format: winston.format.combine(winston.format.timestamp(),utilities.format.nestLike())}),new winston.transports.DailyRotateFile({level: 'error',dirname: 'logs',filename: 'error-%DATE%.log',datePattern: 'YYYY-MM-DD',zippedArchive: true,maxSize: '10m',maxFiles: '14d',format: winston.format.combine(winston.format.timestamp(),winston.format.simple(),),}),new winston.transports.DailyRotateFile({level: 'info',dirname: 'logs',filename: 'info-%DATE%.log',datePattern: 'YYYY-MM-DD',zippedArchive: true,maxSize: '10m',maxFiles: '14d',format: winston.format.combine(winston.format.timestamp(),winston.format.simple(),),}),]})const logger = WinstonModule.createLogger({instance})const app = await NestFactory.create(AppModule, {logger});app.setGlobalPrefix('api');//路由前缀//全局响应拦截app.useGlobalInterceptors(new ResponseInterceptor());//全局异常拦截 只能有一个 写入日志app.useGlobalFilters(new HttpExceptionFilter(logger));await app.listen(7000);
}
bootstrap();

其中自定义异常 自动写入日志记录

app.useGlobalFilters(new HttpExceptionFilter(logger));
import { ExceptionFilter, Catch, ArgumentsHost, HttpException, LoggerService } from '@nestjs/common';
import { Request, Response } from 'express';
/*** 封装 自定义 http 异常拦截*/@Catch(HttpException)
export class HttpExceptionFilter implements ExceptionFilter {//把错误异常自动加到日志constructor(private logger: LoggerService ) {}catch(exception: HttpException, host: ArgumentsHost) {const ctx = host.switchToHttp();// 请求和响应对象const response = ctx.getResponse<Response>();const request = ctx.getRequest<Request>();// http状态码const status = exception.getStatus();this.logger.error(exception.message, exception.stack);let json = {code: status,msg: exception.message || exception.name, //exception.getResponse(),timestamp: new Date().toISOString(),path: request.url,method: request.method,}response.status(status).json(json);}
}

控制台打印结果

自动生成的logs文件夹

如果在生产环境,logs文件夹,要自定路径。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714664.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

mysql学习

查看glibc版本 ldd --version --mysql启动失败,尝试启动 1 查看错误日志,端口被占用,参数名写错,有不支持的参数 2 通过mysqld启动 mysqld --default-filemy.cnf & 3 mysqld --no-defaults --basedir/user/local/mysql --datadir/data/mysql/3306/data/ --usermysql 4 str…

深入理解 Nginx 的负载均衡与反向代理

深入理解 Nginx 的负载均衡与反向代理 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。由于其出色的性能和灵活性&#xff0c;Nginx 已成为现代 web 架构中的重要组成部分&#xff0c;尤其是在处理高并发连接和大规模流量时。在…

找到数组的中间位置-1991-[简单]

力扣 关键点 从题目中总结出公式 sum * 2 nums[i] total从左往右开始尝试&#xff0c;寻找 i 位置满足上面的公式&#xff0c;为什么从左开始&#xff0c;因为题目要求找到最左边的一个用前缀和的概念来解&#xff0c;从左往右尝试i位置的左边所有数之和&#xff0c;右边所有…

基础小白快速入门Python------>模块的作用和意义

模块&#xff0c; 这个词听起来是如此的高大威猛&#xff0c;以至于萌新小白见了瑟瑟发抖&#xff0c;本草履虫见了都直摇头&#xff0c;好像听上去很难的样子&#xff0c;但是但是&#xff0c;年轻人&#xff0c;请听本少年细细讲述&#xff0c;他只是看起来很难&#xff0c;实…

GO-接口

1. 接口 在Go语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型。 interface是一组method的集合&#xff0c;接口做的事情就像是定义一个协议&#xff08;规则&#xff09;&#xff0c;只要一台机器有洗衣服和甩干的功能&#xff0c;我就称它…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用&#xff0c;首先介绍如何安装swagger&#xff0c;测试是否成功&#xff1b;然后列出常用的注释和给出使用例子&#xff1b;最后生成接口文档&#xff0c;并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

C++从零开始的打怪升级之路(day39)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于模板的知识点 1.非类型模板参数 模板参数分为…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实&#xff0c;它只是根据上文&#xff0c;猜下一个词&#xff08;的概率&#xff09;…… OpenAI 的接口名就叫【completion】&#xff0c;也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

高并发下的 AtomicReference 性能陷阱

介绍 Java 提供了 AtomicInteger/AtomicLong 在并发编程里经常用到&#xff0c;它们封装了对 int 和 long 的原子操作。 Java 还提供了 AtomicReference&#xff0c;用于对象引用做原子性的管理&#xff0c;比如 get、set、CAS。 一般情况下 AtomicInteger、AtomicLong 的性能…

mac新环境

1、maven 设置阿里云镜像 打开Maven的settings.xml文件。找到<mirrors>标签&#xff0c;如果没有&#xff0c;可以手动添加。在<mirrors>标签内部添加以下内容&#xff1a; <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorO…

【C++】类的转换函数

使用场景 C中当你创建了一个类&#xff0c;你想把这个类对象转换成基本类型的函数。类对象->基本类型对象 原理 如下实例&#xff0c;设计一个分数类&#xff0c;实现分数转换成double 浮点数的转换函数。并在mian函数隐式调用。 #include<iostream> class Fractio…

6. 使用 Spring Boot进行开发(Developing with Spring Boot)

6. 使用 Spring Boot进行开发&#xff08;Developing with Spring Boot&#xff09; 本节详细介绍了如何使用Spring Boot。它涵盖考虑构建系统、自动配置以及如何运行应用程序等主题。我们还介绍一些 Spring Boot 最新做法。虽然 Spring Boot 没有什么特别之处&#xff08;它只…

Java 接口和抽象类有何区别?

Java接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;都是面向对象编程中用于实现多态和代码复用的重要概念&#xff0c;但它们之间有几个关键的区别&#xff1a; 1. **实例化**&#xff1a; - **接口**&#xff1a;不能被实例化。它…

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema 一、生成Schema二、加密字段三、JSON Schema类型 从3.6版本开始&#xff0c;MongoDB支持根据提供的 JSON Schema验证documents的集合。在创建集合时&#xff0c;可以定义schema本身以及验证操作和级别&…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候&#xff0c;在爬取没有登录的情况下&#xff0c;我们也可以访问一部分页面或请求一些接口&#xff0c;因为毕竟网站本身需要做 SEO&#xff0c;不会对所有页面都设置登录限制。 但是&#xff0c;不登录直接爬取会有一些弊端&#xff0c;弊端主要有…

南京师范大学计电院数据结构课设——排序算法

1 排序算法 1.1 题目要求 编程实现希尔、快速、堆排序、归并排序算法。要求首先随机产生10000个数据存入磁盘文件&#xff0c;然后读入数据文件&#xff0c;分别采用不同的排序方法进行排序并将结果存入文件中。 1.2 算法思想描述 1.2.1 随机数生成 当需要生成一系列随机数…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序&#xff1a; 从第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果顺序不对就交换它们。 经过一轮遍历后&#xff0c;最大&#xff08;或最小&#xff09;的元素会排在最后。 重复进行上述步骤&#xff0c;直到没有任何元素需要交换&#xff0c;即…

Linux了解

简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由芬兰的Linus Torvalds于1991年首次发布。Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统&#xff0c;现在已经被移植到更多的计算机硬件平台&#xff0c;如手机、平板电脑、路由器、视频游戏控…