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 相关文章推荐
超级简单的图片防盗(HTML),好用
Apr 08 Javascript
extjs fckeditor集成代码
May 10 Javascript
JavaScript 事件查询综合
Jul 13 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
深入理解Javascript中的循环优化
Nov 09 Javascript
js取float型小数点后两位数的方法
Jan 18 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
BootStrap TreeView使用实例详解
Nov 01 Javascript
Vue SSR 组件加载问题
May 02 Javascript
js+html5实现手机九宫格密码解锁功能
Jul 30 Javascript
如何自定义微信小程序tabbar上边框的颜色
Jul 09 Javascript
JavaScript实现通讯录功能
Dec 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
linux iconv方法的使用
2011/10/01 PHP
php empty() 检查一个变量是否为空
2011/11/10 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
解析yahoo邮件用phpmailer发送的实例
2013/06/24 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
简单的php文件上传(实例)
2013/10/27 PHP
ThinkPHP中关联查询实例
2014/12/02 PHP
codeigniter中实现一次性加载多个view的方法
2015/03/20 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
js键盘事件的keyCode
2014/07/29 Javascript
JavaScript通过join函数连接数组里所有元素的方法
2015/03/20 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
JavaScript中校验银行卡号的实现代码
2016/12/19 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
vscode下的vue文件格式化问题
2018/11/28 Javascript
微信小程序学习总结(一)项目创建与目录结构分析
2020/06/04 Javascript
JS实现密码框效果
2020/09/10 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python 获取新浪微博的最新公共微博实例分享
2014/07/03 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
python使用thrift教程的方法示例
2019/03/21 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
python实现用户名密码校验
2020/03/18 Python
python em算法的实现
2020/10/03 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
Pycharm 解决自动格式化冲突的设置操作
2021/01/15 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
安全责任书范文
2014/03/12 职场文书
企业法人授权委托书范本
2014/09/23 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL