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分页
Jun 07 Javascript
Javascript - HTML的request类
Jan 09 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
Dec 20 Javascript
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
js验证模型自我实现的具体方法
Jun 21 Javascript
js中的referrer返回上一页使用介绍
Sep 26 Javascript
JS实现自动定时切换的简洁网页选项卡效果
Oct 13 Javascript
Jquery $when done then的用法详解
May 20 Javascript
JavaScript中利用构造器函数模拟类的方法
Feb 16 Javascript
Vue.js 单页面多路由区域操作的实例详解
Jul 17 Javascript
在微信小程序中保存网络图片
Feb 12 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
Dec 22 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
javascript 面向对象编程基础:封装
2009/08/21 Javascript
Ubuntu 11.10 安装Node.js的方法
2011/11/30 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
jQuery插件Flexslider实现图片轮播、图文结合滑动切换效果
2020/04/16 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
Vue.js父与子组件之间传参示例
2017/02/28 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
微信小程序实现顶部选项卡(swiper)
2020/06/19 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
微信小程序页面渲染实现方法
2019/11/06 Javascript
Python实现购物系统(示例讲解)
2017/09/13 Python
对numpy的array和python中自带的list之间相互转化详解
2018/04/13 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
Numpy中的数组搜索中np.where方法详细介绍
2021/01/08 Python
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书
竞聘书的秘诀
2019/04/02 职场文书
vue.js Router中嵌套路由的实用示例
2021/06/27 Vue.js
详解 TypeScript 枚举类型
2021/11/02 Javascript
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle