目前,我在任何路由文件中都像这样使用带有log4js模块的express:
var log = require('log4jslogger.js').LOG;
log.info('this is log statement');
记录器.js
var log4js = require('log4js');
log4js.configure(__base + "log4jsconfig.json");
var logger = log4js.getLogger('default');
Object.defineProperty(exports, "LOG", {
value : logger,
});
logs4jsconfig.json
{
"appenders": {
"out": {
"type": "stdout"
},
"default": {
"type": "dateFile",
"filename": "logs/default",
"pattern": "-yyyy-MM-dd.log",
"alwaysIncludePattern": true,
"keepFileExt": true
}
},
"categories": {
"default": {
"appenders": ["out",
"default"],
"level": "trace"
}
}
}
我想在所有日志语句中添加记录的[username]
或[unauthenticated]
。 我可以像req.user.id
一样.
我们如何做到这一点而不是将其添加到所有日志语句中?
在log4js文档中,我发现了使用令牌的布局,但没有清楚地了解如何形成AuthLibrary.currentUser()
const currentUser = require("./authLibrary").currentUser;
log4js.configure({
replaceConsole: true,
appenders: {
stdout: {
type: 'console',
layout: {
type: "pattern",
pattern: "%d %p %c %x{user} %m%n",
tokens: {
user: function (logEvent) {
return `[auth:${currentUser().UserName || '-'} / ${currentUser().UserId || '-'}]`;
},
},
},
}
},
categories: { default: { appenders: ['stdout'], level: 'info' }, },
});
身份验证库.js
let user = {};
const setCurrentUser = (_user) => {
user = _user;
}
const currentUser = () => user;
module.exports = { currentUser, setCurrentUser };
//测试
(async (err, req, res, next) => {
const token = req.get('token')
const user = await authService(token)
req.currentUser = user;
require("../utils/authLibrary").setCurrentUser(user);
})(null, { get: (x) => "1697E29ADE8DA9F6F84E214CF66E" }, null, null)