1. 程式人生 > >Node 進階:express 預設日誌元件 morgan 使用筆記

Node 進階:express 預設日誌元件 morgan 使用筆記

1.安裝

npm install express morgan

2.使用案例(預設)

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

app.use(morgan('short'));
app.use(function(req, res, next){
    res.send('ok');
});

app.listen(3000);

eg:
2016.12.11-advanced-morgan git:(master) ✗ node basic.js
::ffff:127.0.0.1 - GET / HTTP/1.1 304 - - 3.019 ms
::ffff:127.0.0.1 - GET /favicon.ico HTTP/1.1 200 2 - 0.984 ms
核心API
morgan的API非常少,使用頻率最高的就是morgan(),作用是返回一個express日誌中介軟體。

morgan(format, options)
引數說明如下:

format:可選,morgan與定義了幾種日誌格式,每種格式都有對應的名稱,比如combined、short等,預設是default。不同格式的差別可參考這裡。下文會講解下,如果自定義日誌格式。
options:可選,配置項,包含stream(常用)、skip、immediate。
stream:日誌的輸出流配置,預設是process.stdout。
skip:是否跳過日誌記錄,使用方式可以參考這裡。
immediate:布林值,預設是false。當為true時,一收到請求,就記錄日誌;如果為false,則在請求返回後,再記錄日誌。
自定義日誌格式
首先搞清楚morgan中的兩個概念:format 跟 token。非常簡單:

format:日誌格式,本質是代表日誌格式的字串,比如 :method :url :status :res[content-length] - :response-time ms。
token:format的組成部分,比如上面的:method、:url即使所謂的token。
搞清楚format、token的區別後,就可以看下morgan中,關於自定義日誌格式的關鍵API。

morgan.format(name, format);  // 自定義日誌格式
morgan.token(name, fn);  // 自定義token

3.使用案例(自定義format)

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

morgan.format('hcsy', '[hcsy] :method :url :status');

app.use(morgan('hcsy'));

app.use(function(req, res, next){
    res.send('ok');
});

app.listen(3000);

eg:
[hcsy] GET /users 304