61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
|
|
/**
|
||
|
|
* GMP-Agent 日志模块
|
||
|
|
* 简单的结构化日志, 输出到控制台 + 文件
|
||
|
|
*/
|
||
|
|
|
||
|
|
const fs = require('fs');
|
||
|
|
const path = require('path');
|
||
|
|
|
||
|
|
function createLogger(module) {
|
||
|
|
const prefix = '[' + module + ']';
|
||
|
|
|
||
|
|
function formatMessage(level, msg, meta) {
|
||
|
|
const ts = new Date().toISOString();
|
||
|
|
let line = ts + ' ' + level + ' ' + prefix + ' ' + msg;
|
||
|
|
if (meta) {
|
||
|
|
line += ' ' + JSON.stringify(meta);
|
||
|
|
}
|
||
|
|
return line;
|
||
|
|
}
|
||
|
|
|
||
|
|
function writeToFile(line) {
|
||
|
|
try {
|
||
|
|
const logsDir = process.env.GMP_LOGS_DIR || path.join(process.cwd(), 'logs');
|
||
|
|
if (!fs.existsSync(logsDir)) {
|
||
|
|
fs.mkdirSync(logsDir, { recursive: true });
|
||
|
|
}
|
||
|
|
const logFile = path.join(logsDir, 'gmp-agent.log');
|
||
|
|
fs.appendFileSync(logFile, line + '\n');
|
||
|
|
} catch (err) {
|
||
|
|
// 日志写入失败不应影响主流程
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
info: function(msg, meta) {
|
||
|
|
const line = formatMessage('INFO', msg, meta);
|
||
|
|
console.log(line);
|
||
|
|
writeToFile(line);
|
||
|
|
},
|
||
|
|
warn: function(msg, meta) {
|
||
|
|
const line = formatMessage('WARN', msg, meta);
|
||
|
|
console.warn(line);
|
||
|
|
writeToFile(line);
|
||
|
|
},
|
||
|
|
error: function(msg, meta) {
|
||
|
|
const line = formatMessage('ERROR', msg, meta);
|
||
|
|
console.error(line);
|
||
|
|
writeToFile(line);
|
||
|
|
},
|
||
|
|
debug: function(msg, meta) {
|
||
|
|
if (process.env.GMP_DEBUG === 'true') {
|
||
|
|
const line = formatMessage('DEBUG', msg, meta);
|
||
|
|
console.log(line);
|
||
|
|
writeToFile(line);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
module.exports = { createLogger };
|