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文件夹,要自定路径。
相关文章:
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; im…...
LeetCode刷题笔记之二叉树(四)
一、二叉搜索树的应用 1. 700【二叉搜索树中的搜索】 题目: 给定二叉搜索树(BST)的根节点 root 和一个整数值 val。你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。代码&a…...
【MATLAB源码-第150期】基于matlab的开普勒优化算法(KOA)机器人栅格路径规划,输出做短路径图和适应度曲线。
操作环境: MATLAB 2022a 1、算法描述 开普勒优化算法(Kepler Optimization Algorithm, KOA)是一个虚构的、灵感来自天文学的优化算法,它借鉴了开普勒行星运动定律的概念来设计。在这个构想中,算法模仿行星围绕太阳的…...
最佳实践:Websocket 长连接状态如何保持
WebSocket 是一种支持通过单个 TCP 连接进行全双工通信的协议,相较于传统的 HTTP 协议,它更适合需要实时交互的应用场景。此协议在现代 Web 应用中扮演着至关重要的角色,尤其是在需要实时更新和通信的场合下维持持久连接。本文将探讨 WebSock…...
Unity AStar寻路算法与导航
在游戏开发中,寻路算法是一个非常重要的部分,它决定了游戏中角色的移动路径。Unity作为一款流行的游戏开发引擎,提供了许多内置的寻路算法,其中最常用的就是AStar算法。AStar算法是一种基于图的搜索算法,通过启发式搜索…...
JavaScript最新实现城市级联操作,json格式的数据
前置知识: <button onclick"doSelect()">操作下拉列表</button><hr>学历:<select id"degree"><option value"0">--请选择学历--</option><option value"1">专科<…...
SD NAND:为车载显示器注入智能与安全的心脏
SD NAND 在车载显示器的应用 在车载显示器上,SD NAND(Secure Digital NAND)可以有多种应用,其中一些可能包括: 导航数据存储: SD NAND 可以用于存储地图数据、导航软件以及车载系统的相关信息。这有助于提…...
矩阵的对角化
概述 对角化矩阵是线性代数中的一个重要概念,它涉及将一个方阵转换成一个对角阵,这个对角阵与原矩阵相似,其主要对角线上的元素为原矩阵的特征值。这样的转换简化了很多数学问题,特别是线性动力系统的求解和矩阵的幂运算。下面是…...
React编写组件时,如何省略.tsx后缀
省略.tsx后缀 当tsconfig.json配置了,需要重启后才会生效 {"compilerOptions": {"allowJs": true,"jsx": "react-jsx",} }当进行以上配置后,导入组件时添加后缀,Eslint报错如下: An im…...
移动端的React项目中如何配置自适应和px转rem
创建项目 create-react-app project-name 启动项目 npm start 下载自适应和px转rem的插件 自适应的: npm install lib-flexible --save px转rem的:npm install postcss-pxtorem5.1.1 --save-dev 创建craco.config.js配置文件 在package.json中…...
TypeScript 结合 React 开发时候 , React.FunctionComponent 解释
在 TypeScript 结合 React 开发时,React.FC(或 React.FunctionComponent)是一个泛型类型,它用于定义函数组件的类型。这个类型定义了函数组件的结构和预期行为,并且提供了泛型支持,以便你可以指定组件 prop…...
2280. 最优标号(最小割,位运算)#困难,想不到
活动 - AcWing 给定一个无向图 G(V,E),每个顶点都有一个标号,它是一个 [0,2^31−1] 内的整数。 不同的顶点可能会有相同的标号。 对每条边 (u,v),我们定义其费用 cost(u,v) 为 u 的标号与 v 的标号的异或值。 现在我们知道一些顶点的标号…...
RestTemplate启动问题解决
⭐ 作者简介:码上言 ⭐ 代表教程:Spring Boot vue-element 开发个人博客项目实战教程 ⭐专栏内容:个人博客系统 ⭐我的文档网站:http://xyhwh-nav.cn/ RestTemplate启动问题解决 问题:在SpringCloud架构项目中配…...
Docker部署前后端服务示例
使用Docker部署js前端 1.创建Dockerfile 在项目跟目录下创建Dockerfile文件: # 使用nginx作为基础镜像 FROM nginx:1.19.1# 指定工作空间 WORKDIR /data/web# 将 yarn build 打包后的build文件夹添加到工作空间 ADD build build# 将项目必要文件添加到工作空间&a…...
方格分割644--2017蓝桥杯
1.用dfs解决,首先这题的方格图形就很像一个走迷宫的类型,迷宫想到dfs,最中心点视为起点,起点有两个小人在这个方格里面对称行动,直到走出迷宫(一个人走出来了另一个人就也走出来了,而走过的点会…...
接口测试用例设计注意点
API接口测试: 1>根据接口文档,检查接口调用方法post/get,状态码、请求值、返回值 2>对请求参数做容错、边界值、等价类校验 3>功能可用,用户友好 4>密码加密,http明文,https协议密文 5>业务…...
学习linux从0到工程师(命令)-4
基本命令 uname -m 显示机器的处理器架构 uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作系统信息 arch 显示机器的处理器架构 uname -m 显示机器…...
【树莓派系统配置+python3.8+环境配置踩坑点汇总】raspberrypi
最近又开始搞树莓派的深度学习模型。很多windows端的环境需要在树莓派上重新部署,中间出现了非常多的问题。主要以各种库的下载安装为主要。 首先,第一个问题: 树莓派系统烧录之后,默认apt一般需要升级看,而默认下载…...
CTFHUB--文件包含漏洞--RCE
文件包含漏洞 文件包含漏洞也是一种注入型漏洞,其本质就是输入一段用户能够控制的脚本或者代码,并让服务端执行。有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,…...
Android 解决引入的三方库中类名冲突问题
参考: Android开发——如何解决三方库中的类名冲突问题_android 类冲突-CSDN博客 Android 解决 jar/aar 包类名冲突 - 简书 实操步骤 1.提前安装好unzip-5.51-bin,proguard-7.4.0,jarjar-1.4软件 2.解压包名冲突的 AAR 文件 进入到需要修…...
5分钟快速搞定:Axure RP中文语言包终极使用指南
5分钟快速搞定:Axure RP中文语言包终极使用指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文…...
本地验证:构建、单元测试与集成测试的自动化执行策略
本地验证:构建、单元测试与集成测试的自动化执行策略 从一次深夜调试说起 上周排查一个内存泄漏问题,花了两小时才发现是单元测试根本没跑起来——CMakeLists里add_test写错了目录路径,但本地make test居然返回了成功。这种“假绿灯”比编译失败更可怕,代码合进主线后CI才…...
Claude API与Graphormer协同:构建智能化学研究助手
Claude API与Graphormer协同:构建智能化学研究助手 1. 引言:化学研究的语言障碍 化学研究领域长期存在一个有趣的现象:专业研究人员与普通用户之间存在巨大的认知鸿沟。一个简单的分子结构描述,对化学家来说可能像母语一样自然&…...
基于VC++的OBD2蓝牙诊断仪开发实战指南
1. 开发环境搭建与硬件准备 搞OBD2蓝牙诊断仪开发,首先得把家伙事儿备齐。我当年第一次折腾这个的时候,光找兼容的蓝牙模块就花了三天,这里把踩过的坑都给你总结好了。 开发主机建议用Windows 10/11系统,Visual Studio 2019或2022…...
PvZ Toolkit终极指南:如何轻松掌控植物大战僵尸游戏体验
PvZ Toolkit终极指南:如何轻松掌控植物大战僵尸游戏体验 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit 你是否曾经在玩《植物大战僵尸》时感到束手无策?想要无限阳光轻松通…...
3步解锁完整功能:Navicat Premium for Mac终极重置解决方案
3步解锁完整功能:Navicat Premium for Mac终极重置解决方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac Navic…...
如何构建高效分布式大众点评数据采集系统:5大反爬策略实战指南
如何构建高效分布式大众点评数据采集系统:5大反爬策略实战指南 【免费下载链接】dianping_spider 大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping…...
Whisper语音识别实战:会议记录、外语学习、播客转文字应用案例
Whisper语音识别实战:会议记录、外语学习、播客转文字应用案例 1. 引言:语音识别如何改变工作与学习 想象一下这样的场景:你刚参加完一场两小时的多语言技术会议,需要整理会议纪要;或者你正在学习一门外语࿰…...
如何向别人清晰地解释技术问题?
如何向别人清晰地解释技术问题? 在技术领域工作或学习时,我们常常需要向他人解释复杂的技术概念或问题。无论是向非技术人员说明某个功能的工作原理,还是帮助同事理解一段代码的逻辑,清晰、有效的表达至关重要。技术问题往往涉及…...
惊艳效果!Face Analysis WebUI人脸分析案例:从图片到详细报告
惊艳效果!Face Analysis WebUI人脸分析案例:从图片到详细报告 1. 人脸分析技术的新标杆 现代人脸分析技术已经发展到令人惊叹的水平。想象一下,上传一张普通照片,系统就能告诉你照片中每个人的年龄、性别、面部特征甚至头部朝向…...
