ExpressJS morgan仅记录路由请求

8

我正在使用NodeJS Web框架Expressjs和一个中间件(morgan)将请求记录到文件中。

我的配置:

// create a write stream (in append mode)
var accessLogStream = fs.createWriteStream(__dirname + '/logs/access.log', {flags: 'a'})

// setup the logger
app.use(logger('short', {stream: accessLogStream}))

我的日志看起来像这样:

192.168.1.3 - GET /signup HTTP/1.1 304 - - 19.194 ms 
192.168.1.3 - GET /assets/css/admin/module.admin.stylesheet-complete.sidebar_type.collapse.no_min2.css HTTP/1.1 304 - - 15.500 ms 
192.168.1.3 - GET /assets/components/library/jquery/jquery.min.js?v=v1.0.3-rc2&amb;sv=v0.0.1.1 HTTP/1.1 304 - - 14.244 ms 

有没有一种方式仅记录路由请求?例如,如果用户输入/signup/:
192.168.1.3 - GET /signup HTTP/1.1 304 - - 19.194 ms

而不是所需的路线资产。

提前致谢。


非常惊讶这里没有API选项。 - Anthony
2个回答

21

我遇到了同样的问题,我找到了一个简单的解决方案,也许会有帮助。如果你使用 express.static,你可以将这个调用放在 morgan 调用之上,例如:

我遇到了相同难题,但已找到简易方法,或许对他人有帮助。若使用 express.static 可尝试将该调用置于 morgan 调用之前:

app.use(express.static(__dirname + '/public'));
...
app.use(logger('short'));

静态资源不会被记录。注意:您的资产文件必须存在,否则它们仍将被记录(在express 4.12中测试)。


哇,那真的很简单而且非常有效。你是真正的MVP。谢谢! - mdv

2

如果在静态路由之后实例化记录器,那么静态路由将不会被记录

app.use(express.static('...')); // first declare static folder

app.use(logger('any format here')); // instantiate logger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接