/**
 * Модуль файлового логера
 *
 * Copyright: (c) 2015-2020, Milofon Project.
 * License: Subject to the terms of the BSD 3-Clause License, as written in the included LICENSE.md file.
 * Author: <m.galanin@milofon.pro> Maksim Galanin
 * Date: 2020-04-18
 */

module dango.system.logging.loggers.file;

private
{
    import vibe.core.log : FileLogger, Logger, LogLevel;
    import vibe.core.concurrency: lock;

    import dango.system.logging.core;
}


/**
 * Фабрика создающая файловый логгер
 */
class FileLoggerFactory : LoggerFactory
{
    shared(Logger) createComponent(UniConf config) @trusted
    {
        string fileName = config.getOrElse("file", "dango.log");
        LogLevel level = matchLogLevel(config.getOrElse("level", "info"));

        FileLogger.Format logFormat = matchLogFormat(
                config.getOrElse("errorFormat", "plain"));
        FileLogger.Format logInfoFormat = matchLogFormat(
                config.getOrElse("infoFormat", "plain"));

        auto result = cast(shared)new FileLogger(fileName);
        {
            auto l = result.lock();
            l.unsafeGet.minLevel = level;
            l.unsafeGet.format = logFormat;
            l.unsafeGet.infoFormat = logInfoFormat;
        }

        return result;
    }
}