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 相关文章推荐
XHTML下,JS浮动代码失效的问题
Nov 12 Javascript
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
Mar 20 Javascript
javascript 手动给表增加数据的小例子
Jul 10 Javascript
js 窗口抖动示例
Sep 04 Javascript
js中回调函数的学习笔记
Jul 31 Javascript
jquery中one()方法的用法实例
Jan 16 Javascript
jQuery实现带水平滑杆的焦点图动画插件
Mar 08 Javascript
jQuery中get方法用法分析
Dec 07 Javascript
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 Javascript
浅谈vue中组件绑定事件时是否加.native
Nov 09 Javascript
JS实现公告上线滚动效果
Jan 10 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
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
js自定义事件代码说明
2011/01/31 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
根据选择不同的下拉值出现相对应的文本输入框
2013/08/01 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
js对象内部访问this修饰的成员函数示例
2014/04/27 Javascript
JS中如何判断传过来的JSON数据中是否存在某字段
2014/08/18 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
Bootstrap的基本应用要点浅析
2016/12/19 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
2018/01/05 Javascript
Vue监听页面刷新和关闭功能
2019/06/20 Javascript
js实现直播点击飘心效果
2020/08/19 Javascript
JavaScript实现HTML导航栏下拉菜单
2020/11/25 Javascript
[03:23]我的刀塔你不可能这么可爱 第一期金萌萌的故事
2014/06/20 DOTA
[02:44]完美大师赛主赛事淘汰赛第二日观众采访
2017/11/24 DOTA
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
python实现自动发送报警监控邮件
2018/06/21 Python
python保留小数位的三种实现方法
2020/01/07 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
资深地理教师自我评价
2013/09/21 职场文书
应届大学生求职的自我评价
2013/11/17 职场文书
最新会计专业求职信范文
2014/01/28 职场文书
电子商务个人职业生涯规划范文
2014/02/12 职场文书
《珍珠泉》教学反思
2014/02/20 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书