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 相关文章推荐
让您的菜单不离网站
Oct 03 Javascript
查找iframe里元素的方法可传参
Sep 11 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
May 04 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
js调用屏幕宽度的简单方法
Nov 14 Javascript
javascript实现数据双向绑定的三种方式小结
Mar 09 Javascript
详解node child_process模块学习笔记
Jan 24 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
Aug 15 Javascript
webpack4打包vue前端多页面项目
Sep 17 Javascript
如何用Node写页面爬虫的工具集
Oct 26 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
Jun 21 Javascript
Layui表格行工具事件与数据回填方法
Sep 13 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
几种显示数据的方法的比较
2006/10/09 PHP
第八节--访问方式
2006/11/16 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
php实现学生管理系统
2020/03/21 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
使用jquery写个更改表格行顺序的小功能
2014/04/29 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
JavaScript中的slice()方法使用详解
2015/06/06 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
NodeJS连接MongoDB数据库时报错的快速解决方法
2016/05/13 NodeJs
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
详细解读Python中解析XML数据的方法
2015/10/15 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
python删除某个字符
2018/03/19 Python
python得到一个excel的全部sheet标签值方法
2018/12/10 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
乌克兰排名第一的在线旅游超市:Farvater.Travel
2020/01/02 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
买房子个人收入证明
2014/01/16 职场文书
入党自荐书范文
2014/03/09 职场文书
励志演讲稿大全
2014/08/21 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
一份教室追逐打闹的检讨书
2014/09/27 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2015年幼师工作总结
2015/04/28 职场文书
小学班级口号大全
2015/12/25 职场文书
MySQL8.0无法启动3534的解决方法
2021/06/03 MySQL
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python