Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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中设置记录器的writeTo属性_C#_.net_Nlog - Fatal编程技术网

C# 在运行时在NLog中设置记录器的writeTo属性

C# 在运行时在NLog中设置记录器的writeTo属性,c#,.net,nlog,C#,.net,Nlog,我的C#程序有以下NLog.config: 我的程序需要根据用户配置将消息记录到不同的日志文件集,例如,有时写入“file1,file2”,有时写入“file2,file3,file4” 那么,是否可以根据用户配置在运行时自定义“logger1”中的“writeTo”属性 非常感谢 如果要写入多个文件,只需使用逗号分隔的字符串作为规则中的“writeTo”属性“file1、file2、file3”。共有6个目标,规则规定写入3个文件,因此将考虑使用文件1、文件2和文件3进行日志记录 但您需要

我的C#程序有以下NLog.config:


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

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


非常感谢

如果要写入多个文件,只需使用逗号分隔的字符串作为规则中的“writeTo”属性“file1、file2、file3”。共有6个目标,规则规定写入3个文件,因此将考虑使用文件1、文件2和文件3进行日志记录

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

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

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


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

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