From 7885cede659f3255be56f77c1eef2ada7387d6f1 Mon Sep 17 00:00:00 2001
From: chenyc <501753378@qq.com>
Date: 星期日, 22 三月 2026 16:23:21 +0800
Subject: [PATCH] 初始化项目
---
src/logger.js | 100 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 100 insertions(+), 0 deletions(-)
diff --git a/src/logger.js b/src/logger.js
new file mode 100644
index 0000000..a1fd1fc
--- /dev/null
+++ b/src/logger.js
@@ -0,0 +1,100 @@
+const fs = require("fs");
+const path = require("path");
+const winston = require("winston");
+const DailyRotateFile = require("winston-daily-rotate-file");
+const config = require("./config");
+
+function resolveLogDir() {
+ const dirFromConfig = (config.log && config.log.dir) || "logs";
+ const appRoot = process.pkg
+ ? path.dirname(process.execPath)
+ : path.resolve(__dirname, "..");
+ return path.isAbsolute(dirFromConfig)
+ ? dirFromConfig
+ : path.resolve(appRoot, dirFromConfig);
+}
+
+const logDir = resolveLogDir();
+try {
+ if (!fs.existsSync(logDir)) {
+ fs.mkdirSync(logDir, { recursive: true });
+ }
+} catch (_) {}
+
+const logLevel = (config.log && config.log.level) || "info";
+const enableFileLog = !config.log || config.log.toFile !== false;
+
+const logFormat = winston.format.combine(
+ winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss.SSS" }),
+ winston.format.errors({ stack: true }),
+ winston.format.printf((info) => {
+ const base = `[${info.timestamp}] [${info.level.toUpperCase()}] ${info.message}`;
+ const extra = { ...info };
+ delete extra.level;
+ delete extra.message;
+ delete extra.timestamp;
+
+ const hasExtra = Object.keys(extra).length > 0;
+ if (!hasExtra) return base;
+ try {
+ return `${base} ${JSON.stringify(extra)}`;
+ } catch (_) {
+ return base;
+ }
+ })
+);
+
+const transports = [
+ new winston.transports.Console({ level: logLevel })
+];
+
+if (enableFileLog) {
+ transports.push(
+ new DailyRotateFile({
+ level: logLevel,
+ dirname: logDir,
+ filename: "gateway-%DATE%.log",
+ datePattern: "YYYY-MM-DD",
+ maxSize: "50m",
+ maxFiles: "30d"
+ })
+ );
+ transports.push(
+ new DailyRotateFile({
+ level: "error",
+ dirname: logDir,
+ filename: "gateway-error-%DATE%.log",
+ datePattern: "YYYY-MM-DD",
+ maxSize: "50m",
+ maxFiles: "30d"
+ })
+ );
+}
+
+const baseLogger = winston.createLogger({
+ level: logLevel,
+ format: logFormat,
+ transports,
+ exitOnError: false
+});
+
+const logger = {
+ debug(message, extra) {
+ if (extra === undefined) baseLogger.debug(message);
+ else baseLogger.debug(message, extra);
+ },
+ info(message, extra) {
+ if (extra === undefined) baseLogger.info(message);
+ else baseLogger.info(message, extra);
+ },
+ warn(message, extra) {
+ if (extra === undefined) baseLogger.warn(message);
+ else baseLogger.warn(message, extra);
+ },
+ error(message, extra) {
+ if (extra === undefined) baseLogger.error(message);
+ else baseLogger.error(message, extra);
+ }
+};
+
+module.exports = logger;
--
Gitblit v1.8.0