C# 在NLog中选择自定义日志级别
我正在为一个应用程序编写一个NLog文件。所需的要求之一是,用户应该能够选择文件大小和日志级别。可以从下拉菜单中选择日志级别。我想我可以有一个文件大小和日志级别的占位符。我该怎么做呢?目前,我已经做到了: 关于这一点,我有两个问题: 如何使日志级别可以在一个选项上选择? 我是否需要为每个日志级别制定不同的目标? 建立在 请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如 UpdateConfig在哪里 在Log Config对话框的处理程序中,我会将级别和文件大小写入应用程序设置,然后调用UpdateConfig 确保为这些应用程序设置附带默认设置,或者处理尚未设置的设置。基于 请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如 UpdateConfig在哪里 在Log Config对话框的处理程序中,我会将级别和文件大小写入应用程序设置,然后调用UpdateConfig 确保为这些应用程序设置提供默认设置,或者处理尚未设置的设置。半动态路由规则 NLog 4.6.7使动态更改日志级别变得容易:C# 在NLog中选择自定义日志级别,c#,wpf,nlog,C#,Wpf,Nlog,我正在为一个应用程序编写一个NLog文件。所需的要求之一是,用户应该能够选择文件大小和日志级别。可以从下拉菜单中选择日志级别。我想我可以有一个文件大小和日志级别的占位符。我该怎么做呢?目前,我已经做到了: 关于这一点,我有两个问题: 如何使日志级别可以在一个选项上选择? 我是否需要为每个日志级别制定不同的目标? 建立在 请注意,结合配置文件nlog.config并在代码中对其进行更改,重新加载nlog.config可能会撤消您的更改。如果将两者结合使用,则在重新加载事件上重新应用更改。例如 Up
<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>