C# 4.0 以编程方式配置log4net

C# 4.0 以编程方式配置log4net,c#-4.0,log4net,fileappender,C# 4.0,Log4net,Fileappender,我在尝试正确配置log4net时遇到了最糟糕的情况。首先,我需要提供一些背景资料,说明到目前为止我是如何成功地使用它的 我的应用程序有一个log4net配置文件,该文件定义了它应该将所有数据记录到的FileAppender。我的所有程序集都有一个ILog成员变量,并将其设置为LogManager.GetLogger typeof myclass,其中myclass是正在记录的类 一切都像这样运作得很好 现在我还有一个使用方式略有不同的程序集。它可以被实例化多次,要求每个实例都记录到自己的文件中。

我在尝试正确配置log4net时遇到了最糟糕的情况。首先,我需要提供一些背景资料,说明到目前为止我是如何成功地使用它的

我的应用程序有一个log4net配置文件,该文件定义了它应该将所有数据记录到的FileAppender。我的所有程序集都有一个ILog成员变量,并将其设置为LogManager.GetLogger typeof myclass,其中myclass是正在记录的类

一切都像这样运作得很好

现在我还有一个使用方式略有不同的程序集。它可以被实例化多次,要求每个实例都记录到自己的文件中。我能够通过编程实现这一点,并放弃logging.xml文件

        Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
        hierarchy.Root.Level = log4net.Core.Level.All;            
        hierarchy.Configured = true;

        string module_path = MyCompany.Shared.Utils.FileSystem.GetModulePath();
        string folder = module_path + "\\logs\\";
        string path = String.Format("{0}{1}-log.txt", folder, name);

        _log = LogManager.GetLogger( name);

        var fa = new log4net.Appender.FileAppender() { Name = name, File = path, AppendToFile = true};
        var layout = new PatternLayout { ConversionPattern = "%date{{yyyy-MM-dd-HH_mm_ss.fff}} [%thread] %-5level %logger - %message%newline" };
        layout.ActivateOptions();
        fa.Layout = layout;
        fa.ActivateOptions();

        ((Logger)_log.Logger).AddAppender( fa);
这也很有效。现在问题来了:上面的程序集使用另一个也使用log4net的程序集。然而,该程序集期望已经配置了一个记录器以供使用,显然我以编程方式设置log4net的方式阻止了它的工作

我已经启用了内部log4net调试,我看到的错误消息非常明确,但我不确定如何最好地解决这个问题:

log4net: Logger: No appenders could be found for logger [test_logger] repository [log4net-default-repository]
log4net: Logger: Please initialize the log4net system properly.
log4net: Logger:    Current AppDomain context information: 
log4net: Logger:       BaseDirectory   : C:\Sample\bin\Debug\
log4net: Logger:       FriendlyName    : SampleTestApp.vshost.exe
log4net: Logger:       DynamicDirectory: 
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]
我假设已经创建了记录器,因为即使显式使用LoggerFactory创建测试记录器,我也会得到相同的错误。所以这只是一个如何为记录器创建appender的问题。我曾尝试使用前面的代码为此记录器创建FileAppender,但即使代码运行,也会出现相同的错误

有人能给我提些建议,让我试着让它发挥作用吗


编辑-我应该澄清,我真的希望所有日志消息都进入由测试应用程序创建的FileAppender。我希望避免为每个程序集创建一个单独的文件。

在程序集中,没有xml文件的是您在_log上调用的方法。如果是这样的话,这是否意味着如果您正常地包含xml文件,它不会干扰您当前的方法,但可能允许其他程序集工作?另一种尝试是创建FileAppender,然后调用log4net.Config.BasicConfigurator.Configureappender;