【问题标题】:Express connect logger missing some tokens快速连接记录器缺少一些令牌
【发布时间】:2014-02-27 03:02:12
【问题描述】:

我正在使用 Node Express 并使用 Connect Logger 进行日志记录。我想查看的大多数标记都正确记录了一个值,但其中一些标记为连字符。例如,默认的日志格式定义为:

default ':remote-addr - - [:date] ":method :url HTTP/:http-version" 
:status :res[content-length] ":referrer" ":user-agent"'

但以下两个标记仅显示连字符(而不是实际值):

:res[content-length]
:referrer

我还尝试在 Connect 的内容类型示例之后定义新令牌:

express.logger.token('type', function(req, res){ 
return req.headers['content-type']; })

但还是没有运气。我的最终目标是显示发出请求的用户名,但我什至无法获得开箱即用的体验,所以我想知道我是否正确设置了这个。

这是我的基本代码设置:

var express = require('express')
, http = require('http')
, path = require('path')
, request = require('request')
, util = require('util')            
, parseString = require('xml2js').parseString
, htmlDec = require('htmldec')  
, users = require('./users')        
, companies = require('./companies')    
, app = module.exports = express()
, flash = require('connect-flash')
, passport = require('passport')
, LocalStrategy = require('passport-local').Strategy
, ensureLoggedIn = require('connect-ensure-login').ensureLoggedIn
, async = require('async')
, nodemailer = require("nodemailer")
, fs = require('fs')
, sanitizeHtml = require('sanitize-html')
, memwatch = require('memwatch');

app.server = require('http').createServer(app);

app.configure(function() {
app.set('views', __dirname + '/views');
app.set('view engine', 'html'); 
app.use(express.logger());
app.use(express.compress());  
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session({/* are here in source */}));       
app.engine('.html', require('ejs').__express);
app.use(flash());
app.use(passport.initialize());  
app.use(passport.session());    
app.use(app.router);  
app.use('/styles', express.static(__dirname + '/styles'));
app.use(express.static(__dirname + '/../../public'));
});

npm ls

├── async@0.2.9
├── connect-ensure-login@0.1.1
├── connect-flash@0.1.1
├── ejs@0.8.4
├── escape-html@1.0.1 extraneous
├─┬ express@3.4.8
│ ├── buffer-crc32@0.2.1
│ ├─┬ commander@1.3.2
│ │ └── keypress@0.1.0
│ ├─┬ connect@2.12.0
│ │ ├── batch@0.5.0
│ │ ├── bytes@0.2.1
│ │ ├─┬ multiparty@2.2.0
│ │ │ ├─┬ readable-stream@1.1.11
│ │ │ │ ├── core-util-is@1.0.1
│ │ │ │ ├── debuglog@0.0.2
│ │ │ │ └── string_decoder@0.10.25-1
│ │ │ └── stream-counter@0.2.0
│ │ ├── negotiator@0.3.0
│ │ ├── pause@0.0.1
│ │ ├── qs@0.6.6
│ │ ├── raw-body@1.1.2
│ │ └── uid2@0.0.3
│ ├── cookie@0.1.0
│ ├── cookie-signature@1.0.1
│ ├── debug@0.7.4
│ ├── fresh@0.2.0
│ ├── merge-descriptors@0.0.1
│ ├── methods@0.1.0
│ ├── mkdirp@0.3.5
│ ├── range-parser@0.0.4
│ └─┬ send@0.1.4
│   └── mime@1.2.11
├── htmldec@0.0.1
├── memwatch@0.2.2
├─┬ morgan@1.0.0 
│ └── bytes@0.2.1
├─┬ nodemailer@0.5.5
│ ├─┬ mailcomposer@0.2.6
│ │ ├── dkim-signer@0.1.0
│ │ ├── he@0.3.6
│ │ ├── mime@1.2.9
│ │ ├─┬ mimelib@0.2.14
│ │ │ ├── addressparser@0.2.0
│ │ │ └─┬ encoding@0.1.7
│ │ │   └── iconv-lite@0.2.11
│ │ └── punycode@1.2.3
│ └─┬ simplesmtp@0.3.16
│   ├── rai@0.1.8
│   └── xoauth2@0.1.8
├─┬ nodetime@0.8.14
│ └─┬ nodetime-native@0.1.0
│   └── bindings@1.1.1
├─┬ passport@0.1.17
│ ├── pause@0.0.1
│ └── pkginfo@0.2.3
├─┬ passport-local@0.1.6
│ └── pkginfo@0.2.3
├─┬ request@2.27.0
│ ├── aws-sign@0.3.0
│ ├── cookie-jar@0.3.0
│ ├── forever-agent@0.5.0
│ ├─┬ form-data@0.1.2
│ │ └─┬ combined-stream@0.0.4
│ │   └── delayed-stream@0.0.5
│ ├─┬ hawk@1.0.0
│ │ ├── boom@0.4.2
│ │ ├── cryptiles@0.2.2
│ │ ├── hoek@0.9.1
│ │ └── sntp@0.2.4
│ ├─┬ http-signature@0.10.0
│ │ ├── asn1@0.1.11
│ │ ├── assert-plus@0.1.2
│ │ └── ctype@0.5.2
│ ├── json-stringify-safe@5.0.0
│ ├── mime@1.2.11
│ ├── node-uuid@1.4.1
│ ├── oauth-sign@0.3.0
│ ├── qs@0.6.6
│ └── tunnel-agent@0.3.0
├─┬ sanitize-html@0.1.4
│ ├─┬ htmlparser2@3.3.0
│ │ ├── domelementtype@1.1.1
│ │ ├── domhandler@2.1.0
│ │ ├── domutils@1.1.6
│ │ └── readable-stream@1.0.17
│ └── lodash@1.3.1
└─┬ xml2js@0.2.8
  └── sax@0.5.7

【问题讨论】:

    标签: node.js logging express token connect


    【解决方案1】:

    这可能是一个案例问题。 Javascript 属性名称区分大小写。

    我认为content-length 应该是Content-Length

    referer 拼写错误。所以你可以试试Refererreferer

    【讨论】:

    • 谢谢。请注意,默认格式定义在源代码中,我相信@tjholowaychuk 会在测试中注意到。另外,据我发现,Connect 似乎将 Logger 的名称更改为 Morgan。我做了一个差异并且有变化,但两个版本都使用:response.getHeader,它表示它不区分大小写。无论如何,我去了当地的消息来源并尝试了不同的案例,但他们没有帮助。两个版本还检查推荐人/推荐人的替代拼写。
    猜你喜欢
    • 2020-12-27
    • 2015-05-09
    • 2017-04-12
    • 1970-01-01
    • 2018-04-20
    • 2022-01-22
    • 1970-01-01
    • 2016-05-14
    • 2019-10-26
    相关资源
    最近更新 更多