5基础篇:自定义日志

news2024/12/27 14:02:06

前言

在所有的后端服务中,日志是必不可少的一个关键环节,毕竟日常中我们不可能随时盯着控制台,问题的出现也会有随机性、不可预见性。一旦出现问题,要追踪错误以及解决,需要知道错误发生的原因、时间等细节信息。

之前的需求分析部分,在网关基础代理的服务中,网关作为所有业务流量的入口也有统一日志落库的需求。所以本章将介绍如何开发一个自定义的日志插件。

开启默认 Logger

NestJS 框架自带了 log 插件,如果只是普通使用,直接开启日志功能即可:

 

const app = await NestFactory.create(ApplicationModule, { logger: true });

但我们为了框架的性能使用 Fastify 来替换底层框架之后,需要使用下述代码来开启 Fastify 的日志系统:

const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter({ logger: true }));

接下来,当我们访问 http://localhost:3000/ ,就可以看到控制台已经在正常打印接口请求的日志了:

image.png

虽然自带的日志功能开启之后,控制台能够正常打印日志,但是 Fastify 默认的日志输出格式无法满足业务需求。首先,无法快速区分日志类型,打印日志能参考的价值不大,其次,logger 并没有本地落库,后续查找也很麻烦,对于一个实战工程来说,快速定位日志问题以及有本地存储日志轮转等功能还是必要的。

自定义 Logger

既然自带的日志功能不能满足我们的业务需求,那就需要对默认的日志功能进行拓展。

  1. 安装几个必要的依赖:

$ yarn add fast-json-parse // 格式化返回对象

$ yarn add pino-multi-stream // 替换输出流

$ yarn add split2 // 处理文本流

$ yarn add dayjs // 可选,如果自己写时间格式化函数可以不用

  1. Fastify 作为一款专注于性能的 HTTP 框架,使用 pino 作为内置日志工具,下面是自定义日志的参数配置:

const split = require('split2')

const stream = split(JSON.parse)

logger: { level: 'info', file: '/path/to/file' // 将调用 pino.destination()

// stream: stream }

开启 file 配置的话,日志会自动存储在本地,如果开启 stream 的配置,就需要自己自定义修改配置,这两者是互斥的,只能配置一个

每个团队对日志的需求也并不相同,如果想对日志做更多定制化的功能,可以选择开启 stream 配置,自己开发所需要的日志功能。

logStream

  1. 新建 common/logger/logStream.ts 文件:

const chalk = require('chalk')
const dayjs = require('d

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

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

相关文章

生信豆芽菜-edgeR差异分析使用说明

网站&#xff1a;http://www.sxdyc.com/diffEdgerAnalyse 一、edgeR差异分析简介 edgeR使用经验贝叶斯估计和基于负二项模型的精确检验来确定差异基因&#xff0c;通过在基因之间来调节跨基因的过度离散程度&#xff0c;使用类似于Fisher精确检验但适应过度分散数据的精确检验用…

GateWay网关使用

流程如下&#xff1a; 1、微服务启动&#xff0c;将自己注册到Nacos&#xff0c;Nacos记录了各微服务实例的地址。 2、网关从Nacos读取服务列表&#xff0c;包括服务名称、服务地址等。 3、请求到达网关&#xff0c;网关将请求路由到具体的微服务。 1.导入依赖 <!--网关…

动手吧,vue移动端消息滚动组件

先看效果图&#xff1a; 1、模板部分 <transition name"fade-sport"><div class"v-message-roll" v-show"visible"><svg class"v-icon" viewBox"0 0 1024 1024" version"1.1" xmlns"http://…

Windows环境下通过 系统定时 执行脚本方式 压缩并备份文件夹 到其他数据盘

环境配置 压缩时需要使用7-zip进行调用&#xff0c;因此根据自己电脑进行安装 官网&#xff1a;https://www.7-zip.org/ 脚本文件 新建记事本文件&#xff0c;重命名为git_back_up.bat echo off rem 设置utf-8可以正常显示中文 chcp 65001 > nulrem 获取当前日期和时间&…

树和二叉树基础概念

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

Webpack 的 sass-loader 在生产模式下最小化 CSS 问题

学习webpack时候我发现一个问题&#xff1a; 将mode 改为production模式后&#xff0c;生成的css会被压缩了&#xff0c;但是我并没有引入CssMinimizerPlugin插件&#xff0c;然后我试着将optimization.minimize 设置为false&#xff0c;测试是否为webpack自带的压缩&#xff0…

微星笔记本:为京津冀、黑吉辽受灾用户提供一系列维修服务

面对近期集中在华北、东北等地出现的极端降水&#xff0c;引发洪涝和地质灾害。全国人民都众志成城、万众一心&#xff0c;在各个环节上贡献自己一份力量。台风无情、微星有爱&#xff0c;为保障您的电脑正常使用&#xff0c;京津冀、黑吉辽全区域微星线下服务中心及微星上门服…

day0808

1.单链表实现约瑟夫环 #include "joseph.h" LoopLink list_create(int m) {LoopLink L (LoopLink)malloc(sizeof(Node));if(NULLL){printf("内存创建失败\n");return 0;}LoopLink qL;for(int i1; i<m; i){LoopLink p (LoopLink)malloc(sizeof(Node));…

年轻代频繁GC ParNew导致http变慢

背景介绍 某日下午大约四点多&#xff0c;接到合作方消息&#xff0c;线上环境&#xff0c;我这边维护的某http服务突然大量超时&#xff08;对方超时时间设置为300ms&#xff09;&#xff0c;我迅速到鹰眼平台开启采样&#xff0c;发现该服务平均QPS到了120左右&#xff0c;平…

管理类联考——逻辑——论证逻辑——汇总篇——真题和典例——削弱

削弱 199-2014-10-41——割裂关系 卫计委的报告表明&#xff0c;这些年来医疗保健费的确是增加了。可见&#xff0c;我们每个人享受到的医疗条件大大改善了。 以下哪项对上述结论提出最严重的质疑? A.医疗保健费的绝大部分用在了对高危病人的高技术强化护理上。 B.在不增加费…

容器——4. Map 接口

文章目录 4.1. HashMap 和 Hashtable 的区别4.2. HashMap 和 HashSet 区别4.3. HashMap 和 TreeMap 区别4.4. HashSet 如何检查重复4.5. HashMap 的底层实现4.5.1. JDK1.8 之前4.5.2. JDK1.8 之后 4.6. HashMap 的长度为什么是 2 的幂次方4.7. HashMap 多线程操作导致死循环问题…

STL模型修复权威指南【3D打印】

设计师和工程师通常需要软件来调整、修复和最终确定 3D 打印的 3D 模型。 幸运的是&#xff0c;手动网格编程的时代早已一去不复返了。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 如今&#xff0c;有一系列专用工具可提供自动和手动 STL 修复功能。 自动向导足以满…

zju代码题:4-6

一 分段函数算水费 #include <stdio.h>int main() {/*** 定义两个* 定义浮点型变量* y:水费* x:用水的吨数* */double x, y;printf("Enter x(x>=0):\n"

侯捷 C++ part2 兼谈对象模型笔记——2-xxx-like-classes

2 xxx-like classes 2.1 pointer-like classes 2.1.1 智能指针 设计得像指针class&#xff0c;能有更多的功能&#xff0c;包着一个普通指针指针允许的动作&#xff0c;这个类也要有&#xff0c;其中 *&#xff0c;-> 一般都要重载 template <typename T> class s…

工作中学到三个CSS伪类,直接少些几百行CSS代码~

前言 用最通俗易懂的话讲最难的知识点是我的座右铭&#xff0c;基础是进阶的前提是我的初心。分享一篇好文~ :where 基本使用 :where() CSS 伪类函数接受选择器列表作为它的参数&#xff0c;将会选择所有能被该选择器列表中任何一条规则选中的元素。 以下代码&#xff0c;文…

基于java SpringBoot和Vue零食销售网站设计

随着时代的发展&#xff0c;传统的超市购物方式已经不能满足人们的需求&#xff0c;对于顾客来说&#xff0c;排队购物和支付购物费用的问题亟待解决。对于实体超市来说&#xff0c;他们面临着网上购物的竞争压力&#xff0c;作为超市经理&#xff0c;他们要降低成本&#xff0…

全栈测试平台推荐:RunnerGo

做软件测试的同学在工作时应该都碰到过这种情况&#xff1a;接口管理、接口测试用postman、Apipost等接口管理工具&#xff0c;性能测试用jmeter、loadrunner等性能测试工具&#xff0c;接口自动化则是jmeter脚本或者python脚本配合jenkins使用。这种情况极大的降低了研发效率&…

聚观早报|网信办就人脸识别征求意见;地平线前总监入职比亚迪

【聚观365】8月9日消息 网信办就人脸识别应用征求意见地平线前总监廖杰入职比亚迪理想汽车预计三季度车辆交付量星纪魅族回应终止自研芯片业务上汽集团7月销量同比下滑21% 网信办就人脸识别应用征求意见 据网信中国微信公众号消息&#xff0c;为规范人脸识别技术应用&#xf…

自定义类型——联合

联合 1.联合体的定义 联合也是一种特殊的自定义类型。 先来看一个结构体变量&#xff1a; #include<stdio.h> #include<stdlib.h> union Un {char c;int i; }; int main() {union Un un;printf("%p\n", &un);printf("%p\n", &un.c)…

ad+硬件每日学习十个知识点(26)23.8.6 (DCDC的降压电路、升压电路、降压-升压电路,同步整流,选型考虑同步、隔离)

文章目录 1.DCDC的降压原理2.DCDC的升压原理3.DCDC的升压和降压原理4.什么是肖特基二极管造成的死区电压&#xff1f;5.MOS管有死区电压么&#xff1f;6.DCDC的同步整流&#xff08;用MOS管取代整流二极管&#xff0c;避免死区电压的影响&#xff09;7.DCDC选型——同步与非同步…