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 相关文章推荐
JavaScript RegExp方法获取地址栏参数(面向对象)
Mar 10 Javascript
jQuery 事件队列调整方法
Sep 18 Javascript
不使用中间变量,交换int型的 a, b两个变量的值。
Oct 29 Javascript
jQuery基本过滤选择器用法示例
Sep 09 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
利用NPM淘宝的node.js镜像加速nvm
Mar 27 Javascript
源码分析Vue.js的监听实现教程
Apr 23 Javascript
亲自动手实现vue日历控件
Jun 26 Javascript
vuex入门最详细整理
Mar 04 Javascript
JavaScript实现打字游戏
Feb 19 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 XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
PHP的MVC模式实现原理分析(一相简单的MVC框架范例)
2014/04/29 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
php比较相似字符串的方法
2015/06/05 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
浅谈JavaScript中面向对象技术的模拟
2006/09/25 Javascript
基于jquery的网页SELECT下拉框美化代码
2010/10/28 Javascript
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
一张表格告诉你windows.onload()与$(document).ready()的区别
2014/05/16 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
微信小程序 slider 详解及实例代码
2017/01/10 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
json前后端数据交互相关代码
2018/09/19 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
Python中for循环详解
2014/01/17 Python
python实现简易数码时钟
2021/02/19 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python中SQLite如何使用
2020/05/27 Python
Python 基于jwt实现认证机制流程解析
2020/06/22 Python
LN-CC日本:高端男装和女装的奢侈时尚目的地
2019/09/01 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
EJB的几种类型
2012/08/15 面试题
毕业生个人求职的自我评价
2013/10/28 职场文书
幼儿运动会邀请函
2014/01/17 职场文书
应用化学专业职业生涯规划书
2014/01/22 职场文书
工程资料员岗位职责
2014/03/10 职场文书
青春励志演讲稿范文
2014/08/25 职场文书
利用Selenium添加cookie实现自动登录的示例代码(fofa)
2021/05/08 Python
一篇文章弄懂Python中的内建函数
2021/08/07 Python