как отправить для выполнения определенных функций в 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 ответа:
После комментариев к ОП:
Вместо
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 без обертки, как правило. Это дает мне свободу для получения логгеров на основе классов и специализированных логгеров, которые я могу направлять и фильтровать в файле конфигурации. Но если вам нужна или вы хотите использовать обертку, я бы подумал о передаче некоторого контекста с сообщением, Если вы не делаете этого в самом сообщении.