|
|
|
const log4js = require('log4js');
|
|
|
|
|
|
|
|
const logger = log4js.getLogger();
|
|
|
|
const sqlLogger = log4js.getLogger('SQL');
|
|
|
|
|
|
|
|
// 用户日志
|
|
|
|
// 按 用户ID 和 登录日期 区分
|
|
|
|
const pino = require('pino');
|
|
|
|
const path = require('path');
|
|
|
|
const fs = require('fs');
|
|
|
|
const userLoggers = {}; // Store user loggers
|
|
|
|
|
|
|
|
function getUserLogger(_userId) {
|
|
|
|
const userId = _userId.replace('+', '');
|
|
|
|
if (userLoggers[userId]) {
|
|
|
|
return userLoggers[userId];
|
|
|
|
}
|
|
|
|
|
|
|
|
const today = new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toISOString().slice(0, 10); // YYYY-MM-DD
|
|
|
|
|
|
|
|
const logDirectory = path.join(__dirname, '../logs');
|
|
|
|
const logFile = path.join(logDirectory, `user.${userId}.${today}.log`);
|
|
|
|
|
|
|
|
// Ensure the logs directory exists
|
|
|
|
fs.mkdirSync(logDirectory, { recursive: true });
|
|
|
|
|
|
|
|
// Create or open the log file stream
|
|
|
|
// const logStream = fs.createWriteStream(logFile, { flags: 'a' }); // 'a' for append mode
|
|
|
|
const dest = pino.destination(logFile);
|
|
|
|
|
|
|
|
const logger = pino(
|
|
|
|
{
|
|
|
|
level: 'info',
|
|
|
|
formatters: {
|
|
|
|
level: label => {
|
|
|
|
return { level: label };
|
|
|
|
},
|
|
|
|
},
|
|
|
|
// timestamp: pino.stdTimeFunctions.isoTime,
|
|
|
|
timestamp: () => {
|
|
|
|
return `,"time":"${new Date(new Date().getTime() + 8 * 60 * 60 * 1000).toISOString()}"`; // GMT+8
|
|
|
|
},
|
|
|
|
},
|
|
|
|
dest,
|
|
|
|
);
|
|
|
|
|
|
|
|
userLoggers[userId] = logger;
|
|
|
|
return logger;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = logger;
|
|
|
|
module.exports.logger = logger;
|
|
|
|
module.exports.sqlLogger = sqlLogger;
|
|
|
|
module.exports.getUserLogger = getUserLogger;
|
|
|
|
module.exports.default = logger;
|