【问题标题】:How to set debugEnabled/InfoEnabled in nlog.config如何在 nlog.config 中设置 debugEnabled/InfoEnabled
【发布时间】:2018-02-28 11:23:09
【问题描述】:

我有 NLog 包的 Logger, 我想在我的配置记录器文件中定义 trace enable=true。

我该怎么做?

我的 NLog.config 文件:

   <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>
    <target name="logfile" xsi:type="File" fileName="file.txt" />
    <target name="logconsole" xsi:type="Console" />
  </targets>

  <rules>
    <logger name="*" maxlevel="Trace" minlevel="Trace" writeTo="logfile" />

  </rules>
</nlog>

【问题讨论】:

    标签: c# configuration nlog


    【解决方案1】:

    您可以通过在 NLog.config 的 rules 部分中设置 minLevel 属性来做到这一点;

    <rules>
      <logger name="*" minlevel="Debug" writeTo="CSVFile" />
    </rules>
    

    Debug 将写出DebugInfoWarnErrorFatal 级别的日志消息。只有Trace 被跳过。

    编辑

    相反,如果您只想记录Trace,则像这样设置maxLevel

    <rules>
      <logger name="*" maxlevel="Trace" writeTo="CSVFile" />
    </rules>
    

    要仅记录特定的中间级别,请一起使用minLevelmaxLevel

    <rules>
      <logger name="*" minlevel="Debug" maxlevel="Debug" writeTo="CSVFile" />
    </rules>
    

    EDIT2

    我调整了您的配置文件,以便将输出记录到控制台而不是文件;

    <?xml version="1.0" encoding="utf-8" ?>
    <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    
      <targets>
        <target name="logfile" xsi:type="File" fileName="file.txt" />
        <target name="logconsole" xsi:type="Console" />
      </targets>
    
      <rules>
        <logger name="*" maxlevel="Trace" writeTo="logconsole" />
      </rules>
    </nlog>
    

    当在测试应用程序中运行时,我会像这样写出多个日志记录级别;

    _logger.Trace("trace text");
    _logger.Debug("debug text");
    _logger.Info("info text");
    _logger.Warn("warn text");
    _logger.Error("error text");
    _logger.Fatal("fatal text");
    

    并且只有 Trace 文本显示在控制台窗口中。但是需要注意的一点是,配置文件中的 XML 必须正确格式化。上面的示例按照我在此处的测试应用程序中的描述工作。

    【讨论】:

    • 我只需要跟踪,所有级别都是默认的
    • @user1012506,我已经更新了答案,只在Trace 级别登录
    • 谢谢,我在问题中添加了 NLog.config,不起作用
    • @user1012506,它工作得很好。但是,我已经用我在本地工作的测试应用程序的细节更新了我的答案。
    【解决方案2】:

    您可以通过创建多个记录器实例来创建多个级别的记录,例如

     <rules>
      <!-- add your logging rules here -->
      <!-- different logger instances for different environments, no levels are mentioned explicitly, can be done if exclusion of some levels is required -->
      <logger name="Log.Dev" minlevel="Debug" writeTo="database" enabled="true" />
      <logger name="Log.Staging" minlevel="Info" writeTo="database" enabled="true" />
      <logger name="Log.Production" minlevel="Error" writeTo="database" enabled="true" />
    </rules>
    

    然后在初始化时给出你要初始化的记录器的名称

            /// <summary>
        /// The log. 
        /// Getting Logger instance from key name defined in Web.config of main web file. Key name is LoggerInstanceName
        /// On the basis of name , logger instance and defined rules can be switched from one to another.
        /// </summary>
        private static readonly NLog.Logger Log = LogManager.GetLogger(Convert.ToString(ConfigurationManager.AppSettings.Get("LoggerInstance")));
    

    另外不要忘记在您的应用设置中添加密钥

    <appSettings>
    <!--logger instance name-->
    <add key="LoggerInstanceName" value="Log.Dev" />
    </appSettings>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2019-07-06
      • 2023-02-01
      • 1970-01-01
      • 2021-05-11
      • 1970-01-01
      • 2023-03-12
      相关资源
      最近更新 更多