日志库 winston 的学习笔记 - logger.info 的实现原理单步调试
按照这篇文章日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用里的代码,对下列方法进行单步调试:
因为我们调用的是 info 方法,所以生成的日志,level 为 info:
第一个参数为 message,后面的都是 meta 信息:
在 info 的实现代码里,首先判断传入 log 方法的参数个数:
如果参数个数为 0 或者 1,有专门的实现。否则,进入 self.log:
构造 info 对象:
其中 msg 变量存储的是用户调用 info 方法传入的第一个参数,meta 是传递的第二个参数。
最后调用内部的 write 方法,传入的 message,是两个参数的连接。
encoding 是 utf8
chunk:
write 里面先 read,然后再 _transform:
format 我们选择的是 json format:
json.js 负责把 info 对象序列化成 json 字符串:
结果:
addChunk:
emit:
三个 listeners:
data listener:
这里面看到了应用开发人员指定的 combined.log:
writeOrBuffer:
_write 的注释:Writes the info object to our transport instance.
好多递归操作:
准备投递到 fs stream 来写了:
文件 transport 的写入逻辑:
这是 fs 的 native 实现了:
更多Jerry的原创文章,尽在:“汪子熙”:
日志库 winston 的学习笔记 - logger.info 的实现原理单步调试相关推荐
- 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理
if (process.env.NODE_ENV !== 'production') {logger.add(new winston.transports.Console({format: winst ...
- 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用
winston 被设计为一个简单且通用的日志库,支持多种传输. 传输本质上是日志的存储设备. 每个 winston 记录器都可以在不同级别配置多个存储渠道.例如,人们可能希望将错误日志存储在持久的远程 ...
- Cadence学习笔记第9讲-元件原理图库的创建-20191116
Cadence学习笔记第9讲-元件原理图库的创建-20191116 本人 也是刚刚学习,如有错误欢迎指正. 在开始设计原理图前,我们需要创建所需要的器件的原理图,这时就需要库,原理图库来存放器件的原理 ...
- Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践
文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...
- 模电学习笔记 (一) 晶体三极管工作原理
大家好,我是一名从事硬件电路设计的小工程师一名.我决心从今天开始撰写自己的博客,一方面是为了对知识进行总结记录,加深理解与认识,另一方面希望大家可以多多批评指正,同时结识更多志同道合的朋友,一起学习进 ...
- 最大熵学习笔记(二)最大熵原理
生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Prin ...
- 日志分析工具 LogParser 学习笔记
1.LogParser是什么? 官方文档解释:log Parser是一款功能强大的多功能工具,可提供对基于文本的数据(例如日志文件,XML文件和CSV文件)以及Windows®操作系统上的关键数据源( ...
- CoAP协议学习笔记 1.3 用UDP工具来调试CoAP
1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...
- TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]
我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自动根据loss计算对应variable的导数.示例如下: loss = . ...
最新文章
- 静态内部类和非静态内部类区别汇总
- 闭关修炼——two——struts2
- 接口文档示例_在示例中使用Android中的Work Manager
- 树莓派学习笔记——交叉编译工具链
- 从 setNeedsLayout 说起
- 51单片机怎么显示当前时间_单片机初学者必看
- 银行计算机设备日常检查表,[计算机]201154安全检查表.doc
- 1137. 第 N 个泰波那契数
- http status 404 – 未找到_从零开始搭建自己的网站004添加404处理页面
- Java GridBagLayout简单电子邮件发送界面的实现
- mysql 柱状图统计_js/jquery 进行动态统计 各种柱状图 饼状图 线条图 等
- python类加载_如何重新加载一个类在python shell?
- oracle 的逻辑结构设计,浅谈Oracle数据库逻辑结构
- PCB制板自学(三)_电容及封装
- 如何读代码?读代码的利器---FreeMind
- 入门:安装Python
- python中abs函数是什么意思_python abs函数怎么用
- 【ERROR】java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
- 优酷视频kux格式转换为MP4的两种技巧
- 【H5】 React 微信H5调试等随记