使用运行时修改进行记录

时间:2013-09-28 06:40:03

标签: vb.net logging nlog

我是一个没有经验的VB.NET程序员,试图将日志记录添加到他的应用程序中。我正在使用Nlog,它运行良好,但我需要我的用户能够选择他们希望看到的日志级别(调试,信息,警告),并在运行时通过配置页切换到文件。

Nlog在app.config中的静态配置运行良好,但在运行时以编程方式更改规则是我在努力的地方。我已阅读API文档,并且有“添加”目标或规则的方法,但我可以看到“删除”目标或修改规则的简单方法。

我也看过像SLF这样的Facade试图让我的生活更简单,但我也没有看到一种简单的方法来添加新的日志记录目标或在运行时更改日志级别。

任何建议,代码片段(我很擅长VB或C#)都会非常感激。

1 个答案:

答案 0 :(得分: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()   

我希望这会有所帮助。