gpt4 book ai didi

c# - 在运行时在 NLog 中设置 Logger 的 writeTo 属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:03 25 4
gpt4 key购买 nike

我的 C# 程序有以下 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"
xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
autoReload="true"
throwExceptions="false"
internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
<targets>
<target xsi:type="File" name="file1" fileName="file1.log" layout="${message}" />
<target xsi:type="File" name="file2" fileName="file2.log" layout="${message}" />
<target xsi:type="File" name="file3" fileName="file3.log" layout="${message}" />
<target xsi:type="File" name="file4" fileName="file4.log" layout="${message}" />
<target xsi:type="File" name="file5" fileName="file5.log" layout="${message}" />
<target xsi:type="File" name="file6" fileName="file6.log" layout="${message}" />
</targets>
<rules>
<logger name="logger1" minlevel="Debug" writeTo="file1" />
</rules>
</nlog>

我的程序需要根据用户配置将消息记录到不同的日志文件集,例如,有时写入“file1,file2”,有时写入“file2,file3,file4”。

那么,是否可以根据用户配置在运行时自定义“logger1”中的“writeTo”属性?

非常感谢。

最佳答案

如果你想写入多个文件,你可以简单地使用逗号分隔的字符串作为规则中的“writeTo”属性,如“file1,file2,file3”。有 6 个目标,规则说写入 3 个文件,因此文件 1、文件 2 和文件 3 将被考虑用于日志记录。

但您需要的是在运行时执行。下面是 C# 代码。

        Console.Out.WriteLine("Logget started");
Console.Out.WriteLine("");

Logger logger = LogManager.GetCurrentClassLogger();
var config = new LoggingConfiguration();


//Define targets
var fileTarget = new FileTarget();
config.AddTarget("file7", fileTarget);

var fileTarget2 = new FileTarget();
config.AddTarget("file8", fileTarget);

// Set target properties
fileTarget.FileName = "file7.log";
fileTarget.Layout = "${message}";
fileTarget2.FileName = "file8.log";
fileTarget2.Layout = "${message}";

// Define rules
var rule1 = new LoggingRule("*", LogLevel.Debug, fileTarget);
config.LoggingRules.Add(rule1);

var rule2 = new LoggingRule("*", LogLevel.Debug, fileTarget2);
config.LoggingRules.Add(rule2);
LogManager.Configuration = config;

logger.Trace("trace log message");
logger.Debug("debug log message");
logger.Info("info log message");
logger.Warn("warn log message");
logger.Error("error log message");
logger.Fatal("fatal log message");

logger.Log(LogLevel.Info, "Sample informational message");
Console.ReadKey();
}

正如代码注释所解释的那样,它定义了新的目标和规则。 NLog.config 将在运行时重新定义。

下面是我的 NLog.config 目标和规则

  <targets>
<target xsi:type="File" name="file1" fileName="file1.log" layout="${message}" />
<target xsi:type="File" name="file2" fileName="file2.log" layout="${message}" />
<target xsi:type="File" name="file3" fileName="file3.log" layout="${message}" />
<target xsi:type="File" name="file4" fileName="file4.log" layout="${message}" />
<target xsi:type="File" name="file5" fileName="file5.log" layout="${message}" />
<target xsi:type="File" name="file6" fileName="file6.log" layout="${message}" />
</targets>

<rules>
<logger name="*" minlevel="Debug" writeTo="file1,file2,file3" />
</rules>

这些目标和规则将在运行时由我们的 C# 代码重新定义,并且只有 file7.log 和 file8.log 将被考虑用于日志记录。

关于c# - 在运行时在 NLog 中设置 Logger 的 writeTo 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40176178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com