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 相关文章推荐
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
Jan 11 Javascript
让jQuery Mobile不显示讨厌loading界面的方法
Feb 19 Javascript
Bootstrap表格和栅格分页实例详解
May 20 Javascript
浅谈js数据类型判断与数组判断
Aug 29 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
Dec 26 Javascript
WebPack基础知识详解
Jan 16 Javascript
vue.js根据代码运行环境选择baseurl的方法
Feb 28 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
Feb 21 Javascript
jsonp格式前端发送和后台接受写法的代码详解
Nov 07 Javascript
使用JS实现动态时钟
Mar 12 Javascript
JavaScript动画实例之粒子文本的实现方法详解
Jul 28 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下使用iconv需要注意的问题
2010/11/20 PHP
php GUID生成函数和类
2014/03/10 PHP
laravel学习教程之关联模型
2016/07/30 PHP
Jquery 的扩展方法总结
2011/10/01 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
PHP+jQuery+Ajax实现多图片上传效果
2015/03/14 Javascript
js变形金刚文字特效代码分享
2015/08/20 Javascript
学习JavaScript设计模式之代理模式
2016/01/12 Javascript
详解JavaScript中的构造器Constructor模式
2016/01/14 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
jQuery EasyUI常用数据验证汇总
2016/09/18 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
详解Vue取消eslint语法限制
2018/08/04 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
深入浅出 Vue 系列 -- 数据劫持实现原理
2019/04/23 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
vue封装可复用组件confirm,并绑定在vue原型上的示例
2019/10/31 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[01:54]TI珍贵瞬间系列(五):压力
2020/08/29 DOTA
python针对excel的操作技巧
2018/03/13 Python
Python实现加载及解析properties配置文件的方法
2018/03/29 Python
python实现爬山算法的思路详解
2019/04/09 Python
python3转换code128条形码的方法
2019/04/17 Python
pytorch点乘与叉乘示例讲解
2019/12/27 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
如何写出高性能的JSP和Servlet
2013/01/22 面试题
中国梦主题教育活动总结
2014/05/05 职场文书
2014年乡镇妇联工作总结
2014/12/02 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
教师旷工检讨书
2015/08/15 职场文书
因个人工作失误检讨书
2019/06/21 职场文书
理解python中装饰器的作用
2021/07/21 Python
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript