我无法按照我想要的方式配置log4net。我有一个类库Library.dll,我的应用程序Mine.exe和第三方应用程序Other.exe都使用它。我有另一个类库Util.dll,由Mine.exe和Library.dll使用。
Mine.exe和Other.exe并行运行,我希望Library.dll的两个实例使用相同的日志文件。它也应该与Mine.exe的日志文件分开。当从Library.dll调用时,Util.dll应该记录到Library.dll日志文件,从Mine.exe调用时,应该记录到Mine.exe日志文件。
编辑:我想这有点难以理解,这就是我希望我的工作方式:
Mine.exe登录到Mine.log
Other.exe不记录任何内容(第三方应用程序)
Mine.exe - > Library.dll记录到C:\ Library.log
Other.exe - > Library.dll记录到C:\ Library.log
Mine.exe - > Util.dll登录到Mine.log
Mine.exe - > Library.dll - > Util.dll记录到C:\ Library.log
Other.exe - > Library.dll - > Util.dll记录到C:\ Library.log
Other.exe不直接调用Util.dll。
首先,我尝试使用以下方法在Library.dll中加载自定义log4net配置:
log4net.Config.XmlConfigurator.Configure(new FileInfo("Library.log4net.config"));
但是这导致Mine.exe也登录到Library.dll日志文件。
然后我尝试在Library.dll中添加以下程序集属性:
[assembly: log4net.Config.Repository("Library")]
保持日志分离,但是即使从Library.dll调用,Util.dll也会记录到Mine.exe日志文件中。我想我可以使用Library.dll中的Repository(“Util”),Library.dll中的AliasReposity(“Util”,“Library”)和Mine.exe中的AliasReposity(“Util”,“Mine”),但实际上我有很多项目中的类库,而不是沿着那条路走下去。
有关如何使其发挥作用的任何想法?
/安德烈亚斯
答案 0 :(得分:1)
说实话,我不会共享日志文件。如果从两个进程登录到文件,可能会遇到各种各样的线程问题。通常,如果另一个实例,则一个log4net实例将无法记录,因此会导致日志条目丢失。此外,如果它们位于同一个日志文件中,则需要在日志格式化程序中查找进程名称,以便了解源代码。听起来很复杂。按照惯例,我通常会做以下事情:
您可以获得两个进程的两个文件,但这更容易管理。您可以获取可以同时显示两个日志的日志文件监视器(尽管我倾向于不使用该方法),例如:http://tailforwin32.sourceforge.net/