如何在运行时加载的程序集中使用通用的log4net参考?
时间:2020-03-06 14:45:02 来源:igfitidea点击:
我有一个单线程应用程序,使用以下命令在运行时加载多个程序集:
objDLL = Assembly.LoadFrom(strDLLs[i]);
我希望以这种方式加载的程序集与其余程序集一样使用相同的log4net.ILog参考。但是看来,运行时加载的程序集完全具有不同的引用,并且需要它们自己的配置。有谁知道单个log4net.ILog是否可以在使用.NET接口的运行时加载的程序集中使用?
这是Program类中的log4net.ILog创建和支持代码:
// Configure log4net using the .config file [assembly: log4net.Config.XmlConfigurator(Watch = true)] public static class Program { private static log4net.ILog m_Log = null; [STAThread] public static void Main(string[] args) { try { m_Log = log4net.LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType); } } }
解决方案
如果所有程序集都实现一个公共接口,则可以有一个属性或者构造函数参数,该参数可以使我们将ILog的本地实例传递给动态加载的程序集。
关于运行时加载的类的某些信息使每个类无法正常使用一个ILog。我可以获得一个有效的ILog实例,但是与所有其他实例不同,它似乎没有配置(所有Is ** Enabled标志都设置为false)。也许在运行时加载的类无法访问" root"记录器???
我们可以通过指定文字记录器名称字符串来获取相同的记录器,从而获得相同的记录器实例。
log4net.LogManager.GetLogger("SomeLogger");
我有一个愚蠢的解决方案。我们可以将XmlConfiguration设置为主要的log4net配置文件。
[assembly: log4net.Config.XmlConfigurator(ConfigFile="<configpath>",Watch = true)]
它不是真正的美丽..但是它运行。