Node.js 在本地生成日志文件的方法


Posted in Javascript onFebruary 07, 2020

平常都使用console来打印 node 脚本执行时需要看到的信息,但这些信息也就只能在控制台查看。假如你希望将打印的信息输出到日志(log)文件查看的话,那就往下看看吧。

1、前言

期望:

  • 每次运行脚本时,生成log日志存储到本地
  • 每次执行脚本,之前日志内容清空

需要了解的知识点:

fs
new console.Console

2、什么是 fs

使用 node.js 对日志进行存储,就一定会对本地文件的增删改查,那么我们需要用到fs。

如果你写过 node,想必你应该见过它fs,fs全称为文件系统(File System)。文件系统简单来说就是通过 Node 来操作系统中的文件

fs 不需要 npm install,node 中自带,直接引用即可:

const fs = require('fs');

本文将会使用 fs 的fs.createWriteStream(path, options)方法,用于创建可读流,用法如下:

/**
 * @param1 path
 * @param2 options
 */
let fs = require('fs');
let ws = fs.createWriteStream('./1.txt',{
 flags:'w'//文件的打开模式
 ,mode:0o666//文件的权限设置
 ,encoding:'utf8'//写入文件的字符的编码
 ,highWaterMark:3//最高水位线
 ,start:0 //写入文件的起始索引位置  
 ,autoClose:true//是否自动关闭文档
})

以此用于在日志记录后于本地生成日志文件。

3、new console.Console(stdout[, stderr][, ignoreErrors])

在 node.js 中 console 模块提供了基础的调试功能。使用很简单,常用的API主要有 console.log()、console.error()。

此外,可以基于Console类,方便的扩展出自己的console实例,比如把调试信息打印到文件里,而部署输出在控制台上。

const fs = require('fs');
const file = fs.createWriteStream('./outPut.txt');
let logger = new console.Console(file, file);
// 调用
logger.log('hello');

此时,调用logger.log内容将会输出到 outPut.txt里,而不是打印到控制台。

4、node.js 生成日志文件方法

在了解完 node 的两个模块fsconsole后,我们开始写这个简单而实用的方法,先创建 index.js

// index.js
const fs = require('fs');

let opions = {
 flags: 'a', // 
 encoding: 'utf8', // utf8编码
}
let stderr = fs.createWriteStream('./a.log', options);
// 创建logger
let logger = new console.Console(stderr);
// 真实项目中调用下面即可记录错误日志
logger.log('这是一条日志1');
logger.log('这是一条日志2');
logger.log('这是一条日志3');

打开终端执行node logger.js:

$ node index.js

此时根目录将会生成 a.log 文件

好了,最简易版的就这样完成了。但是当时在此执行node logger.js时,日志将会累加上去,这样会增加本地存储的负担。所以我希望的是每次执行的时候清空一下。

那就来改写一下 index.js, node.js 中改写依旧使用fs的方法fs.writeFile

// 清空a.log内容
fs.writeFile('./a.log', '', function (err) {
 if(err){
  console.log(err);
 }
});

至此,我期望得到的日志文件就完成了。完整代码为:

const fs = require('fs');
let options = {
 flags: 'a', // 
 encoding: 'utf8', // utf8编码
}
let stderr = fs.createWriteStream('./a.log', options);
// 创建logger
let logger = new console.Console(stderr);
fs.writeFile('./a.log', '', function (err) {
 if(err){
  console.log(err);
 }
});
// 真实项目中调用下面即可记录错误日志
logger.log('这是一条日志1');
logger.log('这是一条日志2');
logger.log('这是一条日志3');

可以将此封装起来,然后在需要的地方去调用。logger.log('你需要记录的日志')即可。

5、其他

当然在此基础上你可以拓展其它内容,比如给日志中增加时间戳区分日志类型储存等。

以上,如有问题或建议欢迎指正。

参考资料:

nodejs.cn/api/console…

   nodejs.cn/api/fs.html

总结

以上所述是小编给大家介绍的Node.js 在本地生成日志文件的方法,希望对大家有所帮助!

Javascript 相关文章推荐
js url传值中文乱码之解决之道
Nov 20 Javascript
js字符串转成JSON
Nov 07 Javascript
jquery UI Datepicker时间控件的使用及问题解决
Apr 28 Javascript
jQuery插入节点和移动节点用法示例(insertAfter、insertBefore方法)
Sep 08 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
详解ECMAScript6入门--Class对象
Apr 27 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 Javascript
JavaScript 异步时序问题
Nov 20 Javascript
node.js 微信开发之定时获取access_token
Feb 07 #Javascript
jQuery操作选中select下拉框的值代码实例
Feb 07 #jQuery
webpack的 rquire.context用法实现工程自动化的方法
Feb 07 #Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
Feb 07 #Javascript
vue-cli设置css不生效的解决方法
Feb 07 #Javascript
js生成1到100的随机数最简单的实现方法
Feb 07 #Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 #Javascript
You might like
BBS(php & mysql)完整版(五)
2006/10/09 PHP
php INI配置文件的解析实现分析
2011/01/04 PHP
浅谈Eclipse PDT调试PHP程序
2014/06/09 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
js去除重复字符串两种实现方法
2013/01/09 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
jQuery中 delegate使用的问题
2015/07/03 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
2015/12/15 Javascript
AngularJs基本特性解析(一)
2016/07/21 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
详解基于Wepy开发小程序插件(推荐)
2019/08/01 Javascript
layui下拉框获取下拉值(select)的例子
2019/09/10 Javascript
Node.js创建一个Express服务的方法详解
2020/01/06 Javascript
JavaScript实现Tab选项卡切换
2020/02/13 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
python opencv实现运动检测
2018/07/10 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
Python PIL图片添加字体的例子
2019/08/22 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
python实现视频压缩功能
2020/12/18 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
大学生水果店创业计划书
2014/01/28 职场文书
客服部工作职责范本
2014/02/14 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
2015年科室工作总结
2015/04/10 职场文书
2016年学校“3.12”植树节活动总结
2016/03/16 职场文书