как отправить для выполнения определенных функций в NLog, используя правила в конфигурации с#


У меня есть класс Logger, как это:

public class Logger : ILogging
{
    private ILogger _logger;

    public Logger()
    {
        _logger = LoggerFactory<ILogging>.Resolve();
    }

    public void log(string priority, string message)
    {
  //to do the code here
    }

}

А это мой конфигурационный файл:

 <rules >
<logger name="Priority1" minlevel="Error" writeTo="logfile" />
<logger name="Priority2" minlevel="Warn" writeTo="logfile" />
<logger name="Priority3" minlevel="Debug" writeTo="logfile" />
<logger name="Priority4" minlevel="Trace" writeTo="logfile" />

Я хочу по правилам "Name" записать в определенную функцию в nlog например: если пользователь вызывает

 logger.log("Priority1","errorMessage");

Функция know to go for logger.error ("Ошибка")

Я пытался посмотреть в google, но я не видел никакого хорошего решения

Обновить

      public void log( Priority priority, string message)
    {
        string currentLogLevel;
        _logger = NLog.LogManager.GetLogger(priority.ToString());
        LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
        _logger.Log(logEvent);
    }
2 2

2 ответа:

После комментариев к ОП:

Вместо

public void log( Priority priority, string message)
{
    string currentLogLevel; // <= This can't work
    _logger = NLog.LogManager.GetLogger(priority.ToString());
    LogEventInfo logEvent = new LogEventInfo(currentLogLevel , _logger.Name, message);
    _logger.Log(logEvent);
}

Do

public void log( Priority priority, string message)
{
    LogLevel logLevel;

    switch(priority)
    {
        case Priority.Priority1 : loglevel = LogLevel.Error; break;
        case Priority.Priority2 : loglevel = LogLevel.Warn; break;
        case Priority.Priority3 : loglevel = LogLevel.Debug; break;
        case Priority.Priority4 : loglevel = LogLevel.Trace; break;
        default: loglevel = LogLevel.None; break;
    }

    _logger = NLog.LogManager.GetLogger(priority.ToString());
    LogEventInfo logEvent = new LogEventInfo(logLevel , _logger.Name, message);
    _logger.Log(logEvent);
}

Для начала.

Но я также предлагаю затем использовать только один регистратор и иметь его в качестве статического поля вашей оболочки.

Я лично использую NLog без обертки, как правило. Это дает мне свободу для получения логгеров на основе классов и специализированных логгеров, которые я могу направлять и фильтровать в файле конфигурации. Но если вам нужна или вы хотите использовать обертку, я бы подумал о передаче некоторого контекста с сообщением, Если вы не делаете этого в самом сообщении.

Вы можете управлять классом оболочки (фабрикой),

См. пример в:

Как сохранить информацию о callsite при обертывании NLog