-1

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

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

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

任何建议、代码片段(我擅长 VB 或 C#)将不胜感激。

4

1 回答 1

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()   

我希望这有帮助。

于 2014-07-02T09:59:29.547 回答