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更优雅的兼容
Aug 12 Javascript
原生js操作checkbox用document.getElementById实现
Oct 12 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
黑帽seo劫持程序,js劫持搜索引擎代码
Sep 15 Javascript
js时间控件只显示年月
Jan 08 Javascript
关于Node.js的events.EventEmitter用法介绍
Apr 01 Javascript
基于 webpack2 实现的多入口项目脚手架详解
Jun 26 Javascript
详解vue-cli3多页应用改造
Jun 04 Javascript
使用vue-router在Vue页面之间传递数据的方法
Jul 15 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
在vue中实现给每个页面顶部设置title
Jul 29 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
2013/01/19 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
Yii2实现自定义独立验证器的方法
2017/05/05 PHP
Laravel 框架基于自带的用户系统实现登录注册及错误处理功能分析
2020/04/14 PHP
js函数setTimeout延迟执行的简单介绍
2013/07/17 Javascript
Extjs中RowExpander控件的默认展开问题示例探讨
2014/01/24 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
js仿搜狐视频记录片列表展示效果
2020/05/30 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
Vue上传组件vue Simple Uploader的用法示例
2017/08/25 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
详解element-ui 表单校验 Rules 配置 常用黑科技
2020/07/11 Javascript
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
分析Python中解析构建数据知识
2018/01/20 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Python 3.8 新功能全解
2019/07/25 Python
python、Matlab求定积分的实现
2019/11/20 Python
python文件处理fileinput使用方法详解
2020/01/02 Python
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
应届生英语教师求职信
2013/11/05 职场文书
中学家长会邀请函
2014/01/17 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
2015教师年度思想工作总结
2015/04/30 职场文书
六一活动主持词
2015/06/30 职场文书
个人工作总结怎么写?
2019/04/09 职场文书