2013-09-28 2 views
-1

Я неопытный программист VB.NET, пытающийся добавить запись в его приложение. Я использую Nlog, и он работает хорошо, но мне нужен мой пользователь, чтобы иметь возможность выбирать уровень журнала (Debug, Info, Warn), который они хотят видеть, и переключать ведение журнала в файл через страницу конфигурации во время выполнения.Регистрация с изменениями времени исполнения

Nlog хорошо работает со статической конфигурацией в app.config, но изменение правил программно во время выполнения - это то, где я боюсь. Я прочитал документацию по API, и есть способы «Добавить» цели или правила, но я вижу простой способ «Удалить» цель или изменить правило.

Я также посмотрел на Facade как SLF, чтобы попытаться сделать мою жизнь проще, но я также не вижу простого способа добавить новые цели ведения журнала или изменить уровень журнала во время выполнения.

Любые советы, фрагменты кода (я хорошо знаком с VB или C#), будут очень благодарны.

ответ

0

Вы можете получить доступ к LogManager.Configuration.LoggingRules и включить или отключить ведение журнала на определенном уровне. Например, используя небольшой проект с конфигой NLog как:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets>  
    <target name="console" xsi:type="Console" layout="${message}"/> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Debug" writeTo="console" /> 
    </rules> 
</nlog> 

и консольное приложение, как

Sub Main() 

    Dim log As Logger = LogManager.GetCurrentClassLogger 

    REM Both lines will be logged as defined in the NLog.config 
    log.Debug("debug message") 
    log.Info("info message") 

    For Each rule As LoggingRule In LogManager.Configuration.LoggingRules 
     rule.DisableLoggingForLevel(LogLevel.Debug) 
     REM rule.EnableLoggingForLevel(LogLevel.Debug) 
    Next 

    LogManager.ReconfigExistingLoggers() 

    REM This line will not be logged as we just disabled it 
    log.Debug("debug message") 
    REM This line will still be logged 
    log.Info("info message") 

    Console.ReadLine() 

End Sub 

отключит все ведение журнал для отладки уровня и ниже. Весьма важна линия:

LogManager.ReconfigExistingLoggers() 

Надеюсь, это поможет.

Смежные вопросы