net express怎么用|Express的日志模块morgan的教程

时间:2020-11-05  来源:php安装  阅读:

这里通过示例简要介绍morgan模块在express中的应用,大部分示例直接来自于 morgan的文档 。

1. 用法及参数

首先需要安装morgan模块:

$ npm install morgan --save
morgan的API:

morgan(format, options);
其中 format 表示日志的格式, morgan预定义了一些日志格式,用常量字符串表示,如’combined’, ‘common’, ‘short’, ‘dev’等;options表示选项,比如将日志输出到终端或者文件,这个参数是可选的。

format 为’combined’时的日志样例:

::1 - - [28/Aug/2016:10:50:53 +0000] "GET /home HTTP/1.1" 200 10 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36"
format 为’short’时的日志样例:

::1 - GET /home HTTP/1.1 304 - - 3.345 ms
2. 应用场景示例

2.1 日志输出到终端

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

var app = express();
app.use(morgan("short"));
// app.use(morgan("short", {stream: process.stdout}));
// ::1 - GET /home HTTP/1.1 304 - - 3.345 ms

app.get("/to-stdout", function(req, res, next) {
    res.send("done.");
});

app.listen(3000);
morgan(format, options) 的第二个参数省略时,morgan默认将日志输出到终端,所以第二个参数的值默认为: {stream: process.stdout} 。

2.2 日志输出到文件

var express = require("express");
var morgan = require("morgan");
var fs = require("fs");
var path = require("path");

var app = express();

var accessLogStream = fs.createWriteStream(path.join(__dirname, "access.log"));

app.use(morgan("common", {stream: accessLogStream}));

app.get("/to-file", function(req, res) {
    res.send("done!");
});

app.listen(3000);
需要定义 morgan(format, options) 的第二个参数,表示文件输出流。

2.3 日志输出到文件,并按天轮转

var express = require("express");
var morgan = require("morgan");
var fs = require("fs");
var path =  require("path");
var fileStreamRotator = require("file-stream-rotator");

var app = express();
var logDir = path.join(__dirname, "logs");
// ensure log directory exists
fs.existsSync(logDir) || fs.mkdirSync(logDir);
// create a rotating write stream
var accessLogStream = fileStreamRotator.getStream({
    date_format: "YYYYMMDD",
    filename: path.join(logDir, "access-%DATE%.log"),
    frequency: "daily",
    verbose: true
});

app.use(morgan("common", {stream: accessLogStream}));
app.get("/to-rotate-file", function(req, res) {
    res.send("done!");
});

app.listen(3000);
需要用到 file-stream-rotator 模块来创建一个轮转的文件流。

2.4 日志同时输出到终端和文件

同时加载输出到终端和文件的morgan对象,如:

app.use(morgan("combined"));
app.use(morgan("common", {stream: accessLogStream}));
2.5 自定义日志格式

var express = require("express");
var morgan = require("morgan");
var uuid = require("node-uuid");

morgan.token("id", function(req) {
    return req.id;
});

function assignId(req, res, next) {
    req.id = uuid.v4();
    next();
};

var app = express();
app.use(assignId);
app.use(morgan(":id :method :url :response-time ms"));

app.get("/customized-format", function(req, res) {
    res.send("done!");
});

app.listen(3000);
使用uuid标识每一个请求,日志如下:

a08516c4-201a-4d8a-9f22-d1b6de5e225f GET /customized-format 3.118 ms

net express怎么用|Express的日志模块morgan的教程

http://m.bbyears.com/jiaocheng/109038.html

推荐访问:express怎么读
相关阅读 猜你喜欢
本类排行 本类最新