我有nodejs服务器,需要实现传出请求的记录。
我们说我使用node-request
const np = require('request-promise');
const logger = require('./winston-logger');
np.get('https://swapi.co/api/planets').
.then(res => {
logger.info( ??? )
})
.catch(err => {
logger.error(err);
})
我的问题是什么应该放在logger.info中?请求的网址,标题,响应正文?是否有大多数开发者格式的流行和建立?
我正在研究这个并没有找到足够的解决方案。 有apache日志格式。但是,对于nodejs应用程序来说,最好的是什么?例如,请求没有时间响应,对记录有用。以及如何与winston记录器一起使用? 此外,我认为这种格式应该可以很好地识别日志解析器
您对如何处理nodejs的日志记录有任何想法吗?
答案 0 :(得分:0)
我试着用一些虚拟代码给你答案。我特意使用Winston进行应用程序记录。
在Winston中,您还可以定义自定义日志参数以及json格式或纯文本格式。当然,在示例代码中,我没有使用 请求或请求 - 承诺模块,但它足以让我们了解Winston如何在应用程序中配置和使用。
的package.json
{
"name": "winston",
"version": "1.0.0",
"description": "",
"main": "index.js",
"dependencies": {
"express": "4.16.2",
"http": "0.0.0",
"nodemon": "1.15.1",
"winston": "2.4.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
logger.js
var winston = require('winston');
var logger = new (winston.Logger)({
transports: [
new winston.transports.File({
filename: __dirname + '/logger.log',
json: false,
timestamp: function () {
return new Date()
},
handleExceptions: true,
humanReadableUnhandledException: true,
})
],
exceptionHandlers: [
new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
],
exitOnError: false
});
module.exports = logger;
module.exports.stream = {
write: function (message, encoding) {
logger.info(message);
}
};
index.js
const express = require('express');
const app = express();
const logger = require("./logger");
app.listen(3000, () => {
logger.log("info", 'Example app listening on port 3000!');
const data = require("./data")(app);
});
data.js
const logger = require(“./ logger”); logger.log(“info”,“执行data.js”);
module.exports = ((app) => {
app.get('/', (req, res) => {
logger.log("info", "Default route executes");
res.send("hello world from data file");
});
app.get('/hello', (req, res) => {
logger.log("info", "hello route executes");
res.send("hello route executes");
});
app.use(function (err, req, res, next) {
logger.log("info", "error routing called");
logger.log("error", err);
if (err.name === 'UnauthorizedError') {
res.status(401).json({ status: 0, code: 401, type: "unauthorised", message: err.name + ": " + err.message });
} else {
res.status(404).json({ status: 0, code: 404, type: "ENOENT", message: "file not found" });
}
});
return app;
});