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