Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在NLog中选择自定义日志级别_C#_Wpf_Nlog - Fatal编程技术网

C# 在NLog中选择自定义日志级别

C# 在NLog中选择自定义日志级别,c#,wpf,nlog,C#,Wpf,Nlog,我正在为一个应用程序编写一个NLog文件。所需的要求之一是,用户应该能够选择文件大小和日志级别。可以从下拉菜单中选择日志级别。我想我可以有一个文件大小和日志级别的占位符。我该怎么做呢?目前,我已经做到了: 关于这一点,我有两个问题: 如何使日志级别可以在一个选项上选择? 我是否需要为每个日志级别制定不同的目标? 建立在 请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如 Up

我正在为一个应用程序编写一个NLog文件。所需的要求之一是,用户应该能够选择文件大小和日志级别。可以从下拉菜单中选择日志级别。我想我可以有一个文件大小和日志级别的占位符。我该怎么做呢?目前,我已经做到了:

关于这一点,我有两个问题:

如何使日志级别可以在一个选项上选择? 我是否需要为每个日志级别制定不同的目标? 建立在

请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如

UpdateConfig在哪里

在Log Config对话框的处理程序中,我会将级别和文件大小写入应用程序设置,然后调用UpdateConfig

确保为这些应用程序设置附带默认设置,或者处理尚未设置的设置。

基于

请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如

UpdateConfig在哪里

在Log Config对话框的处理程序中,我会将级别和文件大小写入应用程序设置,然后调用UpdateConfig

确保为这些应用程序设置提供默认设置,或者处理尚未设置的设置。

半动态路由规则

NLog 4.6.7使动态更改日志级别变得容易:

<nlog>
   <variable name="myLevel" value="Trace" />
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>
重写并重新加载NLog.config

但听起来您应该在NLog.config文件中执行搜索和替换,然后执行显式重新加载:

<nlog>
    <variable name="myLevel" value="Trace" />
    <variable name="mySize" value="42" />
    <targets>
        <target name="logfile" xsi:type="File"
              fileName=".\logs\${shortdate}.log" 
              archiveAboveSize="${mySize}" />
    </targets>
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>
显式重新加载的替代方法是使用NLog,然后NLog将检测对NLog.config-file的更改并自动重新加载

重写并重新加载NLog.user.config

如果您感到兴奋并且喜欢高级内容,那么您也可以使用include文件,并拥有一个默认的NLog.config,其中包括NLog.user.config:

另请参见:

半动态路由规则

NLog 4.6.7使动态更改日志级别变得容易:

<nlog>
   <variable name="myLevel" value="Trace" />
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>
重写并重新加载NLog.config

但听起来您应该在NLog.config文件中执行搜索和替换,然后执行显式重新加载:

<nlog>
    <variable name="myLevel" value="Trace" />
    <variable name="mySize" value="42" />
    <targets>
        <target name="logfile" xsi:type="File"
              fileName=".\logs\${shortdate}.log" 
              archiveAboveSize="${mySize}" />
    </targets>
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>
显式重新加载的替代方法是使用NLog,然后NLog将检测对NLog.config-file的更改并自动重新加载

重写并重新加载NLog.user.config

如果您感到兴奋并且喜欢高级内容,那么您也可以使用include文件,并拥有一个默认的NLog.config,其中包括NLog.user.config:


另请参见:

这是应用程序内的还是将成为一个日志配置程序,它将在应用程序进程之外运行,并且只更改日志配置文件?用户的选择是临时的,例如在应用程序重新启动之前还是持久的?@Fildor下拉菜单和能够选择文件大小将添加到应用程序中。在这里,我将有占位符,然后将替换为任何大小或日志级别选择。所以这一切都将在应用程序中。用户的选择是永久性的。好吧,如果它在应用程序中,我会以编程方式更改NLog配置。受后者的启发,我可能会在应用程序设置中保存用户选择,并在每次重新加载配置时重新应用。这是在应用程序中还是将成为一个日志配置程序,它将在应用程序进程之外运行,只需更改日志配置文件?用户的选择是临时的,例如在应用程序重新启动之前还是持久的?@Fildor下拉菜单和能够选择文件大小将添加到应用程序中。在这里,我将有占位符,然后将替换为任何大小或日志级别选择。所以这一切都将在应用程序中。用户的选择是永久性的。好吧,如果它在应用程序中,我会以编程方式更改NLog配置。受后者的启发,我可能会将用户选择保存在应用程序设置中,并在每次重新加载配置时重新应用。
LogManager.Configuration.Variables["myLevel"] = "Debug";
LogManager.ReconfigExistingLoggers();
<nlog>
    <variable name="myLevel" value="Trace" />
    <variable name="mySize" value="42" />
    <targets>
        <target name="logfile" xsi:type="File"
              fileName=".\logs\${shortdate}.log" 
              archiveAboveSize="${mySize}" />
    </targets>
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>
NLog.LogManager.Configuration = NLog.LogManager.Configuration?.Reload();
<nlog autoreload="true">
    <variable name="myLevel" value="Trace" />
    <variable name="mySize" value="42" />
    <include file="NLog.user.config" ignoreErrors="true" />  <!-- Can override variables -->
    <targets>
        <target name="logfile" xsi:type="File"
              fileName=".\logs\${shortdate}.log" 
              archiveAboveSize="${mySize}" />
    </targets>
    <rules>
      <logger name="*" minlevel="${var:myLevel}" writeTo="logfile" />
    </rules>
</nlog>