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 相关文章推荐
javascript应用:Iframe自适应其加载的内容高度
Apr 10 Javascript
javascript之大字符串的连接的StringBuffer 类
May 08 Javascript
JavaScript 学习笔记 Black.Caffeine 09.11.28
Nov 30 Javascript
table对象中的insertRow与deleteRow使用示例
Jan 26 Javascript
Javascript 按位取反运算符 (~)
Feb 04 Javascript
window.open()详解及浏览器兼容性问题示例探讨
May 29 Javascript
分享一个自己动手写的jQuery分页插件
Aug 28 Javascript
JS实现仿雅虎首页快捷登录入口及导航模块效果
Sep 19 Javascript
详谈angularjs中路由页面强制更新的问题
Apr 24 Javascript
详解jQuery获取特殊属性的值以及设置内容
Nov 14 jQuery
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
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
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
脚本之家贴图转换+转贴工具用到的js代码超级推荐
2007/04/05 Javascript
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
HTML颜色选择器实现代码
2010/11/23 Javascript
把jquery 的dialog和ztree结合实现步骤
2013/08/02 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
2015/06/01 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
原生JS实现垂直手风琴效果
2017/02/19 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
vue2.0设置proxyTable使用axios进行跨域请求的方法
2017/10/19 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
JavaScript引用类型Function实例详解
2018/08/09 Javascript
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
vue cli3.0结合echarts3.0与地图的使用方法示例
2019/03/26 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
Python使用MySQLdb for Python操作数据库教程
2014/10/11 Python
Python采用Django制作简易的知乎日报API
2016/08/03 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
python登录并爬取淘宝信息代码示例
2017/12/09 Python
python 实现在txt指定行追加文本的方法
2018/04/29 Python
用python处理图片之打开\显示\保存图像的方法
2018/05/04 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
python实现tail -f 功能
2020/01/17 Python
python3.7+selenium模拟淘宝登录功能的实现
2020/05/26 Python
HTML5中的拖放实现详解
2017/08/23 HTML / CSS
世界上最大的街头服饰网站:Karmaloop
2017/02/04 全球购物
什么是静态路由?什么是动态路由?各自的特点是什么?
2015/09/16 面试题
2014财务人员自我评价范文
2014/09/21 职场文书
2019消防宣传标语!
2019/07/10 职场文书
导游词之山东八大关
2019/12/18 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL