2013-09-28 53 views
-1

我是一名尝试将日志记录添加到其应用程序的没有经验的VB.NET程序员。我使用的是Nlog,它运行良好,但我需要我的用户能够选择他们希望看到的日志级别(Debug,Info,Warn),并在运行时通过配置页面将日志记录切换到文件。使用运行时修改记录

Nlog与app.config中的静态配置很好地协作,但在运行时以编程方式更改规则是我挣扎的地方。我已经阅读了API文档,并且有许多方法来“添加”目标或规则,但是我可以看到一种简单的方法来“删除”目标或修改规则。

我也看过像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() 

我希望这有助于。