C# NLOG:创建同一类的多个实例并将日志写入同一文件
我试图习惯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
{
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}
。这还允许您将初始上下文流到异步任务