Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.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#_Nlog - Fatal编程技术网

C# Nlog日志级别规则未更改

C# Nlog日志级别规则未更改,c#,nlog,C#,Nlog,例如,具有以编程方式初始化NLog配置的类: public class NLogConfig { public NLogConfiguration(string traceFileName, LogLevel minLogleven, LogLevel maxLogLevel) { var config = new NLog.Config.LoggingConfiguration(); // Targets where to log to fil

例如,具有以编程方式初始化NLog配置的类:

public class NLogConfig
{
    public NLogConfiguration(string traceFileName, LogLevel minLogleven, LogLevel maxLogLevel)
    {
        var config = new NLog.Config.LoggingConfiguration();

        // Targets where to log to file
        var logfile = new NLog.Targets.FileTarget("logfile") { FileName = $"{traceFileName}.log" };
        logfile.Layout = @"${date:format=HH\:mm\:ss}|${level}|${message} ${exception:format=tostring}";

        // Rules for mapping loggers to targets            
        config.AddRule(minLogleven, maxLogLevel, logfile);

        // Apply config           
        LogManager.Configuration = config;
    }

}
现在,我在两个不同的类中调用此配置,例如:

public class A
{

    public A()
    {
        var nlogConfig = new NLogConfig("Trace1", LogLevel.Trace, LogLevel.Fatal);
    }

}

public class B
{

    public B()
    {
        var nlogConfig = new NLogConfig("Trace2", LogLevel.Info, LogLevel.Fatal);
    }

}
现在的问题是,Nlog配置不会采用两种不同的日志级别规则,因此在这种情况下,
Trace1.log
Trace2.log
log都具有
trace
级别,而我期望
Trace1.log
Trace
级别记录,而
Trace2.log
info
日志级别记录


如何修复此行为,以便我可以动态更改日志级别?

开始时,我会尝试概述应用程序的总体设计,然后才提供代码示例

设计概述。

我们(开发者)喜欢让事情尽可能简单。实现这一点的方法之一是分离软件模块的责任。 在您的情况下,类A(或B)不应该关心目标文件名或日志级别。它应该只记录记录,仅此而已! 但您可以询问如何使用不同的设置写入不同的文件?为此,您应该使用“目标”和“规则”概念。基本上,目标只是一个日志目的地。它可以是一个文件、控制台等。一个规则是筛选,只选择您需要的消息。它可以只是一个日志级别或/甚至是通过类名或/或其他方式的特殊过滤器。实际上,在第一个示例中显示的配置是目标和规则的设置。 这种设计应该有助于分离和简化事物。我希望你们能理解我所说的,否则想象一下,当你们需要用100个使用logger的类来更改project中的日志设置时,会发生什么

可能的解决方案。

类A和B应该创建并使用日志实例

public class A
{
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
    public A()
    {
        Logger.Info("Class 'A' created.");
    }
}
Nlog配置通常在应用程序启动时完成,以便在应用程序生命周期内仅执行一次

public static class Program
{
    public static void Main()
    { 
        LogConfiguration();
    }
    private static void LogConfiguration()
    {
       var config = new LoggingConfiguration()

       // Targets where to log to: File and Console
       var f1 = new FileTarget("file1") { FileName = "file1.txt" };
       var f2 = new FileTarget("file2") { FileName = "file2.txt" };

       // Rules for mapping loggers to targets            
       config.AddRule(LogLevel.Info, LogLevel.Fatal, f1);
       config.AddRule(LogLevel.Debug, LogLevel.Fatal, f2);

       // Apply config           
       NLog.LogManager.Configuration = config;
    }
}
可能的功能

从您的代码看来,您可能只想将来自类B的消息写入“file2.txt”。这也是可能的。您需要在规则创建期间指定记录器名称,如下所示。小提示:您要使用的名称是您的全名。 从这个例子中,你们会明白我所说的