按照这篇文章日志库 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 的实现原理单步调试相关推荐

  1. 日志库 winston 的学习笔记 - logger.info 打印到控制台上的实现原理

    if (process.env.NODE_ENV !== 'production') {logger.add(new winston.transports.Console({format: winst ...

  2. 日志库 winston 的学习笔记 - 创建一个使用 winston 的 Node.js 应用

    winston 被设计为一个简单且通用的日志库,支持多种传输. 传输本质上是日志的存储设备. 每个 winston 记录器都可以在不同级别配置多个存储渠道.例如,人们可能希望将错误日志存储在持久的远程 ...

  3. Cadence学习笔记第9讲-元件原理图库的创建-20191116

    Cadence学习笔记第9讲-元件原理图库的创建-20191116 本人 也是刚刚学习,如有错误欢迎指正. 在开始设计原理图前,我们需要创建所需要的器件的原理图,这时就需要库,原理图库来存放器件的原理 ...

  4. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  5. 模电学习笔记 (一) 晶体三极管工作原理

    大家好,我是一名从事硬件电路设计的小工程师一名.我决心从今天开始撰写自己的博客,一方面是为了对知识进行总结记录,加深理解与认识,另一方面希望大家可以多多批评指正,同时结识更多志同道合的朋友,一起学习进 ...

  6. 最大熵学习笔记(二)最大熵原理

    生活中我们经常听到人们说"不要把鸡蛋放到一个篮子里",这样可以降低风险.深究一下,这是为什么呢?其实,这里边包含了所谓的最大熵原理(The Maximum Entropy Prin ...

  7. 日志分析工具 LogParser 学习笔记

    1.LogParser是什么? 官方文档解释:log Parser是一款功能强大的多功能工具,可提供对基于文本的数据(例如日志文件,XML文件和CSV文件)以及Windows®操作系统上的关键数据源( ...

  8. CoAP协议学习笔记 1.3 用UDP工具来调试CoAP

    1 前言 CoAP的调试,目前没找到好用的工具,网上说的火狐插件现在也不能用了,多希望手头的TCP/UDP网络调试工具就可以支持. 既然CoAP是基于UDP来组包的,那肯定是可以实现. 所以这篇文章给 ...

  9. TensorFlow学习笔记之--[compute_gradients和apply_gradients原理浅析]

    我们都知道,TensorFlow为我们提供了丰富的优化函数,例如GradientDescentOptimizer.这个方法会自动根据loss计算对应variable的导数.示例如下: loss = . ...

最新文章

  1. 静态内部类和非静态内部类区别汇总
  2. 闭关修炼——two——struts2
  3. 接口文档示例_在示例中使用Android中的Work Manager
  4. 树莓派学习笔记——交叉编译工具链
  5. 从 setNeedsLayout 说起
  6. 51单片机怎么显示当前时间_单片机初学者必看
  7. 银行计算机设备日常检查表,[计算机]201154安全检查表.doc
  8. 1137. 第 N 个泰波那契数
  9. http status 404 – 未找到_从零开始搭建自己的网站004添加404处理页面
  10. Java GridBagLayout简单电子邮件发送界面的实现
  11. mysql 柱状图统计_js/jquery 进行动态统计 各种柱状图 饼状图 线条图 等
  12. python类加载_如何重新加载一个类在python shell?
  13. oracle 的逻辑结构设计,浅谈Oracle数据库逻辑结构
  14. PCB制板自学(三)_电容及封装
  15. 如何读代码?读代码的利器---FreeMind
  16. 入门:安装Python
  17. python中abs函数是什么意思_python abs函数怎么用
  18. 【ERROR】java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit
  19. 优酷视频kux格式转换为MP4的两种技巧
  20. 【H5】 React 微信H5调试等随记

热门文章

  1. optimized mysql_MySQL|MySQL执行计划
  2. 【蓝桥杯真题】地宫取宝(搜索-记忆化搜索详解)
  3. gitlab添加用户
  4. cocos2d JS 中的数组拼接与排序
  5. 线程池源码分析-FutureTask
  6. LINUX下使用https访问站点
  7. Linux下PortSentry的配置
  8. 【转】 嵌入式C语言编程中Inline函数的应用
  9. Fiddler监听Https请求响应
  10. 【HTTP 2】 序言