网站开发html文件规范,绵阳阡陌网站建设,电商培训班,手机怎么搭建网站源码使用morgan可以打印日志,但是要分割日志文件就需要使用file-stream-rotator,下面介绍使用方法:
1.安装2个依赖
npm i morgan file-stream-rotator
2.在入口文件app.js中引入相关插件
var express require(express);
var fs require(fs);
var pat…使用morgan可以打印日志,但是要分割日志文件就需要使用file-stream-rotator,下面介绍使用方法:
1.安装2个依赖
npm i morgan file-stream-rotator
2.在入口文件app.js中引入相关插件
var express require(express);
var fs require(fs);
var path require(path);
var morgan require(morgan);//https://www.npmjs.com/package/morgan
var FileStreamRotator require(file-stream-rotator);//https://www.npmjs.com/package/file-stream-rotator
var app express();
3.使用插件打印日志
function getTime() {var d new Date();return d.toLocaleString() . d.getMilliseconds();
}
// 自定义的 token 来获取请求头数据
morgan.token(auth, function (req, res) {return req.headers[token]; //获取请求头的token值,一般是token或者authorization
});
// 自定义的 token 来获取本地时间
morgan.token(local-time, getTime);
// 自定义 token 来获取请求体
morgan.token(request-body, function (req, res) {return JSON.stringify(req.body);
});
// 自定义 token 来记录响应体,需要下面的中间件配合才能获取到
morgan.token(response-body, (req, res) {return res.body || ;
});
// 自定义中间件来捕获响应体
app.use(function (req, res, next) {const originalSend res.send.bind(res); // 暂存原始的 end 方法res.send function (body) {res.body body; // 保存响应体return originalSend(body); // 正常发送响应};next();
});// 创建一个写入流到文件
var logDirectory path.join(__dirname, ../logs);//根据个人需要设置文件存放位置
if (!fs.existsSync(logDirectory)) {fs.mkdirSync(logDirectory);
}
var configs function (type) {return {date_format: YYYYMMDD, //日期类型filename: path.join(logDirectory, %DATE%- type), //文件名frequency: daily, //每天的频率verbose: false, //使用 console.log 在事件发生时提供额外的信息。默认值为 false。extension: .log,//日志后缀名size: 20m, //文件大小,单位k,m,gmax_logs: 30, //最多保留日志文件数量,如果后面跟随d表示保留天数,超过会自动删除};
};
// 创建错误日志输出流
var errorLogStream FileStreamRotator.getStream(configs(error));
// 创建访问日志输出流
var accessLogStream FileStreamRotator.getStream(configs(access));//如果需要将代码中console.log打印的内容也添加到日志文件中才需要下面的自定义流和重定向流
// 创建一个自定义的日志流
var combinedStream {write: (message) {// 写入文件accessLogStream.write(message);// 同时输出到控制台// process.stdout.write(message);},
};
// 重定向 console.log 到自定义日志流
var originalConsoleLog console.log;
console.log function (message) {// 将消息写入日志文件combinedStream.write(${getTime()} ${JSON.stringify(message)}\n);// 同时输出到控制台// originalConsoleLog.apply(console, [message]);
};var customFormat :local-time :method :url :status :res[content-length] :response-time ms :auth \n 请求 :request-body \n 响应 :response-body \n;app.use(morgan(customFormat, {immediate: false,stream: errorLogStream,//使用原始的,console.log不会输出到日志文件skip: function (req, res) {return res.statusCode 400; //code 400不过滤},})
);
app.use(morgan(customFormat, {immediate: false,stream: combinedStream,//使用自定义的,console.log会输出到日志文件skip: function (req, res) {//可以根据res.statusCode400,req.method GET,req.url /getUserInfo判断是否过滤var arr [.js, .css, .png, .jpg];return arr.some(function (item) {return req.url.indexOf(item) -1;});},})
);