Создание строго типизированного уровня log4net из строки

Я заметил, что log4net имеет строго типизированный класс уровня . Кто-нибудь знает, есть ли ' Как создать объект уровня путем анализа строки уровня журнала?

Например:

Я хочу проанализировать строку уровня ошибки «ERROR» в эквивалентном объекте log4net.Core.Level.Error, а также для других уровни ведения журнала.

Я написал свой собственный (наивный) метод для этого (см. ниже), но я надеялся, что в log4net есть что-то внутреннее, что сделает это за меня.

Спасибо!

    public static Level ParseLevel(string level)
    {
        switch (level.ToUpperInvariant())
        {
            case "ALERT":
                return log4net.Core.Level.Alert;
            case "ALL":
                return log4net.Core.Level.All;
            case "CRITICAL":
                return log4net.Core.Level.Critical;
            case "DEBUG":
                return log4net.Core.Level.Debug;
            case "EMERGENCY":
                return log4net.Core.Level.Emergency;
            case "ERROR":
                return log4net.Core.Level.Error;
            case "FATAL":
                return log4net.Core.Level.Fatal;
            case "FINE":
                return log4net.Core.Level.Fine;
            case "FINER":
                return log4net.Core.Level.Finer;
            case "FINEST":
                return log4net.Core.Level.Finest;
            case "INFO":
                return log4net.Core.Level.Info;
            case "NOTICE":
                return log4net.Core.Level.Notice;
            case "OFF":
                return log4net.Core.Level.Off;
            case "SEVERE":
                return log4net.Core.Level.Severe;
            case "TRACE":
                return log4net.Core.Level.Trace;
            case "VERBOSE":
                return log4net.Core.Level.Verbose;
            case "WARN":
                return log4net.Core.Level.Warn;
            default:
                throw new Exception("Invalid logging level specified");
        }
    }

Редактировать: На основе по рекомендации Ученика доктора Вили, вот что я в конце концов придумал, используя LevelMap :

    using System;
    using System.Linq;

    public static Level ParseLevel(string level)
    {
        var loggerRepository = LoggerManager.GetAllRepositories().FirstOrDefault();

        if (loggerRepository == null)
        {
            throw new Exception("No logging repositories defined");
        }

        var stronglyTypedLevel = loggerRepository.LevelMap[level];

        if (stronglyTypedLevel == null)
        {
            throw new Exception("Invalid logging level specified");
        }

        return stronglyTypedLevel;
    }

16
задан russcollier 17 March 2017 в 13:32
поделиться