Nodejs+express 实现访问日志和错误日志功能

Nodejs+express 实现访问日志和错误日志功能

打开app.js,加入以下代码:

var fs = require('fs');
var accessLogfile = fs.createWriteStream('access.log', {flags: 'a'});
var errorLogfile = fs.createWriteStream('error.log', {flags: 'a'});

然后在app.configure第一行加入:

app.use(express.logger({stream: accessLogfile}));

至于错误日志,需要单独实现错误响应,修改如下:

对于3.x版本的express:

app.configure('production', function() {
  app.use(function(err, req, res, next){
    var meta = '[' + new Date() + '] ' + req.url + '\n';
    errorLogfile.write(meta + err.stack + '\n');
    next();
  });
});

对于2.x版本的express:

app.configure('production', function() {
  app.error(function(err, req, res, next){
    var meta = '['+new Date()+']' + req.url + '\n';
    errLogfile.write(meta + err.stack + '\n');
    next();
  });
});

5 回复

Nodejs + Express 实现访问日志和错误日志功能

在Web应用中,记录访问日志和错误日志是非常重要的。这不仅可以帮助我们追踪用户的访问行为,还能方便地排查和定位应用程序中的问题。本文将介绍如何使用Node.js和Express框架来实现这两个功能。

步骤1:引入必要的模块

首先,在你的app.js文件中引入fs模块,用于创建和写入日志文件。

var fs = require('fs');

步骤2:创建日志文件流

接着,创建两个日志文件流,一个用于访问日志,另一个用于错误日志。

var accessLogfile = fs.createWriteStream('access.log', { flags: 'a' });
var errorLogfile = fs.createWriteStream('error.log', { flags: 'a' });

这里,flags: 'a'表示以追加模式打开文件,这样每次运行程序时不会覆盖原有的日志内容。

步骤3:配置Express使用访问日志中间件

接下来,在app.configure的第一行添加如下代码,将Express的日志功能指向我们的访问日志文件流。

app.use(express.logger({ stream: accessLogfile }));

这段代码告诉Express使用自定义的流来记录日志信息,而不是默认的控制台输出。

步骤4:处理错误日志

对于Express 3.x版本,我们需要手动设置错误处理中间件来捕获并记录错误日志。在生产环境下添加以下代码:

app.configure('production', function() {
  app.use(function(err, req, res, next) {
    var meta = '[' + new Date() + '] ' + req.url + '\n';
    errorLogfile.write(meta + err.stack + '\n');
    next();
  });
});

而对于Express 2.x版本,则需要使用app.error方法来设置错误处理中间件:

app.configure('production', function() {
  app.error(function(err, req, res, next) {
    var meta = '[' + new Date() + '] ' + req.url + '\n';
    errorLogfile.write(meta + err.stack + '\n');
    next();
  });
});

在这段代码中,当发生错误时,它会将错误信息以及请求的URL等元数据写入到error.log文件中。

通过以上步骤,你就可以为你的Express应用添加访问日志和错误日志的功能了。这些日志不仅有助于监控应用的健康状态,还能在出现问题时提供有价值的信息进行故障排除。


我使用forever跑的express,可以指定access和error的log,真心不错。

在3.x中use,为什么能够捕获到error?不能理解~求解释

恩 对 支持用forever!

要在Node.js中使用Express框架来实现访问日志和错误日志的功能,可以通过使用morgan中间件来处理访问日志,并通过错误处理器来记录错误日志。以下是针对Express 4.x版本的实现方法。

首先,安装morgan中间件:

npm install morgan --save

接下来,在app.js中进行配置:

var express = require('express');
var morgan = require('morgan');

var app = express();

// 使用morgan中间件来写入访问日志
app.use(morgan('combined', {
  stream: fs.createWriteStream('access.log', { flags: 'a' })
}));

// 错误处理器中间件
app.use(function(err, req, res, next) {
  var meta = `[${new Date()}] ${req.url}\n`;
  fs.createWriteStream('error.log', { flags: 'a' }).write(meta + err.stack + '\n');
  next();
});

// 其他路由和中间件配置

app.listen(3000, () => {
  console.log('App is running on port 3000');
});

解释

  1. 引入依赖:首先引入了expressmorgan模块。
  2. 配置morgan:使用morgan中间件将访问日志写入到access.log文件中。这里我们使用了combined格式,并通过stream参数指定了日志输出的位置。
  3. 错误处理器:定义了一个全局的错误处理器中间件,它会在任何错误发生时被调用。在这个中间件里,我们获取了错误信息和请求信息,并将其写入到error.log文件中。

这种方法可以确保你的应用能够方便地记录访问和错误日志,便于后续的日志分析和问题排查。

回到顶部