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高级程序设计(第3版)学习笔记8 js函数(中)
Oct 11 Javascript
Highcharts 非常实用的Javascript统计图demo示例
Jul 03 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
javascript中键盘事件用法实例分析
Jan 30 Javascript
jQuery简单实现提交数据出现loading进度条的方法
Mar 29 Javascript
深入浅出讲解ES6的解构
Aug 03 Javascript
jQuery Validate设置onkeyup验证的实例代码
Dec 09 Javascript
Require.js的基本用法详解
Jul 03 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
vue 实现路由跳转时更改页面title
Nov 05 Javascript
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
js实现滑动滑块验证登录
Jul 24 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函数)
2006/10/09 PHP
php实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
php调用c接口无错版介绍
2014/03/11 PHP
PHP中创建和验证哈希的简单方法实探
2015/07/06 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
clientX,pageX,offsetX,x,layerX,screenX,offsetLeft区别分析
2010/03/12 Javascript
js中将URL中的参数提取出来作为对象的实现代码
2011/08/16 Javascript
中文字符串截取的js函数代码
2013/04/17 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
分享8个JavaScript库可更好地处理本地存储
2020/10/12 Javascript
[58:12]Ti4第二日主赛事败者组 LGD vs iG 3
2014/07/21 DOTA
[36:20]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.17
2020/12/18 DOTA
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python使用base64模块进行二进制数据编码详解
2018/01/11 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
40个你可能不知道的Python技巧附代码
2020/01/29 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
中东奢侈品市场:Coveti
2019/05/12 全球购物
德国咖啡批发商:Coffeefair
2019/08/26 全球购物
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
工厂厂长的职责
2013/12/12 职场文书
幼儿园小班评语
2014/04/18 职场文书
外国人来华邀请函
2015/01/31 职场文书
雷锋电影观后感
2015/06/10 职场文书
团拜会主持词
2015/07/04 职场文书
MongoDB数据库之添删改查
2022/04/26 MongoDB
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
MySql如何将查询的出来的字段进行转换
2022/06/14 MySQL
Hive HQL支持2种查询语句风格
2022/06/25 数据库