const winston = require('winston');
function thisLine() {
    try {
        const e = new Error();
        const regex = /\((.*):(\d+):(\d+)\)$/
        const stacks = e.stack.split("\n")
        const temp = []
        stacks.forEach(stack => {
            if (!stack.includes("node_modules")) {
                temp.push(stack)
            }
        })
        const match = regex.exec(temp[3]);
        return {
            filepath: match[1],
            line: match[2],
            column: match[3]
        };
    } catch (e) {
        return {
            filepath: "unknow",
            line: "0",
            column: "0"
        };
    }
}
const logger = winston.createLogger({
    level: 'info',
    transports: [
        new winston.transports.Console(),
        new winston.transports.File({
            dirname: 'log', filename: 'server.log'
        }),
    ],
    datePattern: 'YYYY-MM-DD',
    zippedArchive: true,
    format: winston.format.combine(
        winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss,SSS" }),
        winston.format.align(),
        winston.format.splat(),
        winston.format.printf(
            (info) => {
                const { timestamp, level, message } = info;
                const { filepath, line } = thisLine()
                return `[${timestamp}] [${level.toUpperCase()}] [${filepath}:${line}] ${message}`; // 包括文件名和行号
            }
        )
    ),
    maxSize: '1000m', // 每个日志文件最大尺寸
    maxFiles: '14d' // 保留的日志文件天数
});

module.exports = logger