"use strict";
/*
 * Copyright 2020 NEM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
const path_1 = require("path");
const winston = require("winston");
const LogType_1 = require("./LogType");
class LoggerFactory {
    static getLogger(id = LogType_1.LogType.System) {
        if (!winston.loggers.has(id.toString())) {
            winston.loggers.add(id.toString(), {
                transports: [LoggerFactory.consoleTransport, LoggerFactory.fileTransport(id)],
                format: winston.format.label({ label: id.toString() }),
            });
        }
        return winston.loggers.get(id.toString());
    }
    static logFormatTemplate(i) {
        return `${i.timestamp} ${i.level} ${i.message}`;
    }
    static getLogFileName(id) {
        switch (id) {
            case LogType_1.LogType.Audit:
                return 'auditLogs.log';
            case LogType_1.LogType.System:
            default:
                return 'logs.log';
        }
    }
}
exports.default = LoggerFactory;
LoggerFactory.consoleTransport = new winston.transports.Console({
    format: winston.format.combine(winston.format.timestamp(), winston.format.cli(), winston.format.printf(LoggerFactory.logFormatTemplate)),
});
LoggerFactory.fileTransport = (id) => new winston.transports.File({
    format: winston.format.combine(winston.format.timestamp(), winston.format.printf(LoggerFactory.logFormatTemplate)),
    options: { flags: 'w' },
    filename: path_1.resolve(LoggerFactory.getLogFileName(id)),
    level: 'info',
});
