Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.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,发现为同一类的多个实例设置日志文件很困难。每个类都是在不同的线程上创建的。请在下面找到示例代码: { ILogger mLogger; public string Name { get; set; } public string SecondName { get; set; } private string mFilePath = @"C:\Logs\"; public test(stri

我试图习惯NLOG,发现为同一类的多个实例设置日志文件很困难。每个类都是在不同的线程上创建的。请在下面找到示例代码:

    {
        ILogger mLogger;
        public string Name { get; set; }
        public string SecondName { get; set; }
        private string mFilePath = @"C:\Logs\";
        public test(string name, string secondname)
        {
            var target = new FileTarget(name) { FileName = mFilePath + name + ".txt" };
            var config = new LoggingConfiguration();
            config.AddRule(LogLevel.Info, LogLevel.Info, target);
            LogManager.Configuration = config;
            mLogger = LogManager.GetLogger(name);
            LogManager.ReconfigExistingLoggers();
            mLogger.Info("Hi from :" + name);
        }
    }
    static void Main(string[] args)
        {
            new Thread(new ThreadStart(() => { new test("Stuart", "Broad"); })).Start();
            new Thread(new ThreadStart(() =>
            {
                new test("John", "Smith");
            })).Start();
            new Thread(new ThreadStart(() =>
            {
                new test("Virat", "Kohli");
            })).Start();
            new Thread(new ThreadStart(() =>
            {
                new test("Christiano", "Ronaldo");
            })).Start();

            new Thread(new ThreadStart(() =>
                {
                    new test("Pat", "cummins");
                })).Start();
            Console.Read();
        }
输出为: 2020-03-03 11:36:56.9404 |信息|克里斯蒂亚诺|你好,发件人:克里斯蒂亚诺 2020-03-03 11:36:56.9404 |信息|斯图尔特|你好,发件人:斯图尔特 2020-03-03 11:36:56.9404 |信息|约翰|你好,发件人:约翰 2020-03-03 11:36:56.9404 | INFO | Virat |你好,发件人:Virat 2020-03-03 11:36:56.9404 |信息|帕特|你好,发件人:帕特

仅从一个文件Christiano.txt

有人能帮我配置一下吗


谢谢。

LogManager。配置是一个静态变量。当你分配它时,你会影响到其他人

相反,为每个线程提供一个唯一的记录器。同一文件目标可以处理多个记录器

{
    ILogger mLogger;
    public string Name { get; set; }
    public string SecondName { get; set; }
    public test(string name, string secondname)
    {
        mLogger = LogManager.GetLogger(name);
        mLogger.Info("Hi from :" + name);
    }
}
static void Main(string[] args)
    {
        string mFilePath = @"C:\Logs\";
        var target = new FileTarget(name) { FileName = Path.Combine(mFilePath, "${logger}.txt") };
        var config = new LoggingConfiguration();
        config.AddRule(LogLevel.Info, LogLevel.Info, target);
        LogManager.Configuration = config;

        new Thread(new ThreadStart(() => { new test("Stuart", "Broad"); })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("John", "Smith");
        })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("Virat", "Kohli");
        })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("Christiano", "Ronaldo");
        })).Start();

        new Thread(new ThreadStart(() =>
            {
                new test("Pat", "cummins");
            })).Start();
        Console.Read();
    }
或者,您可以在文件名布局中使用NLog
${threadname}
而不是
${logger}


另一种选择是使用NLog创建作用域,并在文件名布局中使用
${mdlc:TestName}
。这还允许您将初始上下文流到异步任务。

LogManager。配置是一个静态变量。当你分配它时,你会影响到其他人

相反,为每个线程提供一个唯一的记录器。同一文件目标可以处理多个记录器

{
    ILogger mLogger;
    public string Name { get; set; }
    public string SecondName { get; set; }
    public test(string name, string secondname)
    {
        mLogger = LogManager.GetLogger(name);
        mLogger.Info("Hi from :" + name);
    }
}
static void Main(string[] args)
    {
        string mFilePath = @"C:\Logs\";
        var target = new FileTarget(name) { FileName = Path.Combine(mFilePath, "${logger}.txt") };
        var config = new LoggingConfiguration();
        config.AddRule(LogLevel.Info, LogLevel.Info, target);
        LogManager.Configuration = config;

        new Thread(new ThreadStart(() => { new test("Stuart", "Broad"); })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("John", "Smith");
        })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("Virat", "Kohli");
        })).Start();
        new Thread(new ThreadStart(() =>
        {
            new test("Christiano", "Ronaldo");
        })).Start();

        new Thread(new ThreadStart(() =>
            {
                new test("Pat", "cummins");
            })).Start();
        Console.Read();
    }
或者,您可以在文件名布局中使用NLog
${threadname}
而不是
${logger}

另一种选择是使用NLog创建作用域,并在文件名布局中使用
${mdlc:TestName}
。这还允许您将初始上下文流到异步任务