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 相关文章推荐
漂亮的仿flash菜单,来自蓝色经典
Jun 26 Javascript
Jquery 高亮显示文本中重要的关键字
Dec 24 Javascript
Javascript面向对象扩展库代码分享
Mar 27 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
Jun 20 Javascript
ExtJS[Desktop]实现图标换行示例代码
Nov 17 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
如何判断Javascript对象是否存在的简单实例
May 18 Javascript
jQuery条件分页 代替离线查询(附代码)
Aug 17 jQuery
详解Vue取消eslint语法限制
Aug 04 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
vue自定义右键菜单之全局实现
Apr 09 Vue.js
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
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
js初始化验证实例详解
2016/11/26 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
深入理解Vue transition源码分析
2017/07/30 Javascript
微信小程序实现YDUI的ScrollTab组件
2018/02/02 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
vue实现简单跑马灯效果
2020/05/25 Javascript
[03:01]DOTA2英雄基础教程 露娜
2014/01/07 DOTA
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
Python兔子毒药问题实例分析
2015/03/05 Python
python实现对csv文件的列的内容读取
2018/07/04 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
Python面向对象程序设计之类的定义与继承简单示例
2019/03/18 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
DeinDesign德国:设计自己的手机壳
2019/12/14 全球购物
斯福泰克软件测试面试题
2015/02/16 面试题
餐厅经理岗位职责范本
2014/02/17 职场文书
会计自荐信范文
2014/03/09 职场文书
促销活动计划书
2014/05/02 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
会计师事务所实习证明
2014/11/16 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
详解Python内置模块Collections
2022/03/22 Python