当前位置:Gxlcms > JavaScript > Node.js利用console输出日志文件的方法示例

Node.js利用console输出日志文件的方法示例

时间:2021-07-01 10:21:17 帮助过:51人阅读

通常我们在写Node.js程序时,都习惯使用console.log打印日志信息,但这也仅限于控制台输出,有时候我们需要将信息输出到日志文件中,实际上利用console也可以达到这个目的的,今天就来简单介绍一下。

我们首先创建如下文件:

  1. // index.js
  2. let fs = require('fs');
  3. let options = {
  4. flags: 'a', // append模式
  5. encoding: 'utf8', // utf8编码
  6. };
  7. let stdout = fs.createWriteStream('./stdout.log', options);
  8. let stderr = fs.createWriteStream('./stderr.log', options);
  9. // 创建logger
  10. let logger = new console.Console(stdout, stderr);
  11. for (let i = 0; i < 100; i++) {
  12. logger.log(`log message ${i}`);
  13. logger.error(`err message ${i}`);
  14. }

在上面代码中,我们其实是创建了一个console.Console类的实例,该类需要指定两个参数,即标准输出流和标准错误输出流,正常情况下,实际上是对应了process.stdout和process.stderr,以上的代码中,我们将这两个输出流改为了文件输出流,并指定为文件追加模式,这样即可将日志信息输出到指定的文件中去。运行上面的代码,会生成stdout.log和stderr.log两个文件。

stdout.log文件内容如下:

  1. log message 0
  2. log message 1
  3. log message 2
  4. log message 3
  5. log message 4
  6. log message 5
  7. log message 6
  8. log message 7
  9. log message 8
  10. log message 9
  11. log message 10
  12. ...

stderr.log文件内容如下:

  1. err message 0
  2. err message 1
  3. err message 2
  4. err message 3
  5. err message 4
  6. err message 5
  7. err message 6
  8. err message 7
  9. err message 8
  10. err message 9
  11. err message 10
  12. ...

看上去信息还比较简单,不像是日志文件的样子,我们或许得为每条日志添加一个时间才行,下面先为Date对象添加一个format的原型方法:

  1. // 添加format方法
  2. Date.prototype.format = function (format) {
  3. if (!format) {
  4. format = 'yyyy-MM-dd HH:mm:ss';
  5. }
  6. // 用0补齐指定位数
  7. let padNum = function (value, digits) {
  8. return Array(digits - value.toString().length + 1).join('0') + value;
  9. };
  10. // 指定格式字符
  11. let cfg = {
  12. yyyy: this.getFullYear(), // 年
  13. MM: padNum(this.getMonth() + 1, 2), // 月
  14. dd: padNum(this.getDate(), 2), // 日
  15. HH: padNum(this.getHours(), 2), // 时
  16. mm: padNum(this.getMinutes(), 2), // 分
  17. ss: padNum(this.getSeconds(), 2), // 秒
  18. fff: padNum(this.getMilliseconds(), 3), // 毫秒
  19. };
  20. return format.replace(/([a-z]|[A-Z])(\1)*/ig, function (m) {
  21. return cfg[m];
  22. });
  23. }

然后再改写前面的主文件:

  1. // index.js
  2. let fs = require('fs');
  3. let options = {
  4. flags: 'a', // append模式
  5. encoding: 'utf8', // utf8编码
  6. };
  7. let stdout = fs.createWriteStream('./stdout.log', options);
  8. let stderr = fs.createWriteStream('./stderr.log', options);
  9. // 创建logger
  10. let logger = new console.Console(stdout, stderr);
  11. // 添加format方法
  12. Date.prototype.format = function (format) {
  13. if (!format) {
  14. format = 'yyyy-MM-dd HH:mm:ss';
  15. }
  16. // 用0补齐指定位数
  17. let padNum = function (value, digits) {
  18. return Array(digits - value.toString().length + 1).join('0') + value;
  19. };
  20. // 指定格式字符
  21. let cfg = {
  22. yyyy: this.getFullYear(), // 年
  23. MM: padNum(this.getMonth() + 1, 2), // 月
  24. dd: padNum(this.getDate(), 2), // 日
  25. HH: padNum(this.getHours(), 2), // 时
  26. mm: padNum(this.getMinutes(), 2), // 分
  27. ss: padNum(this.getSeconds(), 2), // 秒
  28. fff: padNum(this.getMilliseconds(), 3), // 毫秒
  29. };
  30. return format.replace(/([a-z]|[A-Z])(\1)*/ig, function (m) {
  31. return cfg[m];
  32. });
  33. }
  34. for (let i = 0; i < 100; i++) {
  35. let time = new Date().format('yyyy-MM-dd HH:mm:ss.fff');
  36. logger.log(`[${time}] - log message ${i}`);
  37. logger.error(`[${time}] - err message ${i}`);
  38. }

重新运行程序,然后查看两个日志文件的内容。

stdout.log内容如下:

  1. [2018-04-27 07:30:54.309] - log message 0
  2. [2018-04-27 07:30:54.312] - log message 1
  3. [2018-04-27 07:30:54.312] - log message 2
  4. [2018-04-27 07:30:54.312] - log message 3
  5. [2018-04-27 07:30:54.312] - log message 4
  6. [2018-04-27 07:30:54.312] - log message 5
  7. [2018-04-27 07:30:54.312] - log message 6
  8. [2018-04-27 07:30:54.312] - log message 7
  9. [2018-04-27 07:30:54.312] - log message 8
  10. [2018-04-27 07:30:54.312] - log message 9
  11. [2018-04-27 07:30:54.312] - log message 10
  12. ...

stderr.log内容如下:

  1. [2018-04-27 07:30:54.309] - err message 0
  2. [2018-04-27 07:30:54.312] - err message 1
  3. [2018-04-27 07:30:54.312] - err message 2
  4. [2018-04-27 07:30:54.312] - err message 3
  5. [2018-04-27 07:30:54.312] - err message 4
  6. [2018-04-27 07:30:54.312] - err message 5
  7. [2018-04-27 07:30:54.312] - err message 6
  8. [2018-04-27 07:30:54.312] - err message 7
  9. [2018-04-27 07:30:54.312] - err message 8
  10. [2018-04-27 07:30:54.312] - err message 9
  11. [2018-04-27 07:30:54.312] - err message 10
  12. ...

这样一个简单的日志输出就完成了。

参考资料:https://nodejs.org/api/console.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行