import {configure, getLogger as _getLogger} from 'log4js';

const {getLogger} = require("./log4js-worker");

/**
 * Log4js 配置
 */


const appName = process.env.KT_APP_NAME || 'debugger'; //从K8S环境变量中获取
const logPath = process.env.KT_LOG_PATH || '/opt/app/logs';

const config = {
    category: '',
    appenders: {
        console: {
            encoding: "utf-8",
            type: 'stdout',
            layout: {
                type: 'pattern',
                pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] %p %m%n'
            }
        },
        everything: {
            type: 'dateFile',
            encoding: "utf-8",
            filename: logPath + '/' + appName + '.log',
            pattern: '.yyyy-MM-dd',
            layout: {
                type: "pattern",
                pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] %p %m%n'
            },
            compress: true
        },
        mstracelog: {
            type: 'dateFile',
            encoding: "utf-8",
            filename: logPath + '/ms_trace_log.log',
            pattern: '.yyyy-MM-dd',
            layout: {
                type: "pattern",
                pattern: '[%d{yyyy-MM-dd hh:mm:ss.SSS}] %p %m%n'
            },
            compress: true
        }
    },
    categories: {
        default: {appenders: ['console', 'everything'], level: 'info'},
        mstracelog: {appenders: ['console', 'mstracelog'], level: 'debug'}
    }
};

configure(config);


let log4js;
let traceLog;
if (appName === 'debugger') {//debug 调试时用单线程模式输出日志文件
    config.category = 'everything';
    log4js = _getLogger(config.category);
    config.category = 'mstracelog';
    traceLog = _getLogger(config.category);
} else {//生产环境用多线程输出log
    config.category = 'everything';
    log4js = getLogger(config);
    config.category = 'mstracelog';
    traceLog = getLogger(config);
}

export {log4js, traceLog}

// %r 日志输出时间，以 toLocaleTimeString 函数格式化
// %p 日志等级
// %c 日志分类
// %h 访问计算机的 hostname
// %m 打印的日志主题内容
// %n 换行标识
// %d 日志输出日期 ( 默认以 ISO8601 方式格式化 )
// 可自定义输出类型 %d{yyyy/MM/dd-hh.mm.ss},输出 2018/05/22-15.42.18
// %z 记录进程 pid 号 ( 数据来自 node 方法 process.pid )
// %x{} 输出自定义 tokens 中的项目，例如上述例子中的 user
// %[ 想要输出的内容 %] 用来给被扩起来的内容着色，颜色和日志 level 有关