【发布时间】:2017-06-13 14:00:23
【问题描述】:
我有一个已经使用 NLog 的项目。应用程序创建给定类的实例,将 ILogger 的实例传递给它,然后在实例中调用“执行”方法 - 系统是多线程的,一次最多可以运行 200 个这样的实例,日志文件可以变得大而难以阅读。
我们需要为每个类的实例创建一个新的日志文件,并将其与该实例的输出一起存储(它们每个都有一个唯一的标识符)
我的问题是:是否可以让 NLog 为每个类的实例创建一个新文件?我知道你可以为不同的类创建不同的日志文件,我想要的是一个类的每个实例都有一个不同的日志文件。
我在网上查看过,但找不到太多这方面的信息,如果 NLog 已经满足了它,我不想通过创建自己的日志记录类来重新发明轮子。
下面是一个控制台应用程序,我已经打开它来演示重新配置现有记录器时会发生什么 - 本质上它会更改记录器的所有实例
class Program
{
static void Main(string[] args)
{
BackgroundWorker bw1 = new BackgroundWorker();
bw1.DoWork += Bw1_DoWork;
bw1.RunWorkerAsync();
BackgroundWorker bw2 = new BackgroundWorker();
bw2.DoWork += Bw2_DoWork;
bw2.RunWorkerAsync();
Console.ReadLine();
}
private static void Bw1_DoWork(object sender, DoWorkEventArgs e)
{
workLoad one = new workLoad("One");
one.execute();
}
private static void Bw2_DoWork(object sender, DoWorkEventArgs e)
{
workLoad one = new workLoad("Two");
one.execute();
}
}
public class workLoad
{
private ILogger _logger { get; set; }
private string _number { get; set; }
public workLoad(string number)
{
_logger = LogManager.GetCurrentClassLogger();
_number = number;
var target = (FileTarget) LogManager.Configuration.FindTargetByName("DebugFile");
target.FileName = $"c:\\temp\\File{number}.txt";
LogManager.ReconfigExistingLoggers();
}
public void execute()
{
for (int i = 0; i < 1000; i++)
{
_logger.Info(_number + " LOOPING" + i);
}
}
}
这会导致所有输出都转到一个文件 (two.txt),下面是日志文件的示例。
2017-06-13 17:00:42.4156 TestNlog.workLoad 两个 LOOPING0 2017-06-13 17:00:42.4156 TestNlog.workLoad One LOOPING0 2017-06-13 17:00:42.4806 TestNlog.workLoad One LOOPING1 2017-06-13 17:00:42.4746 TestNlog.workLoad 两个 LOOPING1 2017-06-13 17:00:42.4806 TestNlog.workLoad One LOOPING2 2017-06-13 17:00:42.4806 TestNlog.workLoad 两个 LOOPING2 2017-06-13 17:00:42.4946 TestNlog.workLoad One LOOPING3 2017-06-13 17:00:42.4946 TestNlog.workLoad 两个 LOOPING3 2017-06-13 17:00:42.4946 TestNlog.workLoad One LOOPING4 2017-06-13 17:00:42.4946 TestNlog.workLoad 两个 LOOPING4 2017-06-13 17:00:42.5132 TestNlog.workLoad One LOOPING5 2017-06-13 17:00:42.5132 TestNlog.workLoad 两个 LOOPING5 2017-06-13 17:00:42.5132 TestNlog.workLoad One LOOPING6 2017-06-13 17:00:42.5257 TestNlog.workLoad 两个 LOOPING6 2017-06-13 17:00:42.5257 TestNlog.workLoad One LOOPING7 2017-06-13 17:00:42.5257 TestNlog.workLoad 两个 LOOPING7 2017-06-13 17:00:42.5407 TestNlog.workLoad 两个 LOOPING8 2017-06-13 17:00:42.5407 TestNlog.workLoad One LOOPING8 2017-06-13 17:00:42.5407 TestNlog.workLoad 两个 LOOPING9 2017-06-13 17:00:42.5407 TestNlog.workLoad One LOOPING9 2017-06-13 17:00:42.5577 TestNlog.workLoad 两个 LOOPING10 2017-06-13 17:00:42.5577 TestNlog.workLoad One LOOPING10
理想情况下,我会查找从实例一到 One.TXT 的所有内容,以及从实例二到 two.txt 的所有内容(您可以看到像这样运行 200+ 可能是个问题!)
【问题讨论】:
-
这方面有什么更新吗?
-
我最终为这些类编写了自己的记录器,并将 nlog 用于更通用的应用程序日志......所以没有更新,抱歉。