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 相关文章推荐
File文件控件,选中文件(图片,flash,视频)即立即预览显示
Apr 09 Javascript
StringTemplate遇见jQuery冲突的解决方法
Sep 22 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
Jquery获取和修改img的src值的方法
Feb 17 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
再谈javascript注入 黑客必备!
Sep 14 Javascript
详解如何让InstantClick兼容MathJax、百度统计等
Sep 12 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
微信小程序实现YDUI的ScrollTab组件
Feb 02 Javascript
vue bus全局事件中心简单Demo详解
Feb 26 Javascript
图解javascript作用域链
May 27 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 清除网页病毒的方法
2008/12/05 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
PHP实现验证码校验功能
2017/11/16 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
在Laravel中使用MongoDB的方法示例
2019/11/11 PHP
网页禁用右键实现代码(JavaScript代码)
2009/10/29 Javascript
jquery中获取id值方法小结
2013/09/22 Javascript
jquery.post用法之type设置问题
2014/02/24 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
jQuery实现的网页左侧在线客服效果代码
2015/10/23 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
简单实现js浮动框
2016/12/13 Javascript
Bootstrap CSS组件之下拉菜单(dropdown)
2016/12/17 Javascript
JavaScript字符串对象
2017/01/14 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
require.js与bootstrap结合实现简单的页面登录和页面跳转功能
2017/05/12 Javascript
基于vue实现swipe分页组件实例
2017/05/25 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
浅谈Vue网络请求之interceptors实际应用
2018/02/28 Javascript
js中null与空字符串""的区别讲解
2019/01/17 Javascript
js实现随机数小游戏
2019/06/28 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
Python数据可视化库seaborn的使用总结
2019/01/15 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
灵泰克Java笔试题
2016/01/09 面试题
房屋出租协议书范本(标准版)
2014/09/24 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
出纳试用期工作总结2015
2015/05/28 职场文书
结婚喜宴迎宾词
2015/08/10 职场文书
幼儿园心得体会范文
2016/01/21 职场文书