我有一个包含 10 个 dll 的项目,每个 dll 使用 log4net 进行日志记录。该项目不是我开始的,我是这样得到的,我需要继续它。因为这是我第一次使用 log4net,所以我想知道如何在运行时获取配置文件 (xml) 和日志文件(记录器写入日志的文件)。我使用断点停止应用程序执行,我希望能够使用快速监视窗口来获取这些参数。
感谢帮助。
就个人而言,我认为您可能会走错路,因为您最好尝试查看 log4net 的配置方式并从中确定它记录信息的位置。
通常的起始位置是 app.config 文件,其中可能包含 log4net 配置本身,或者对另一个外部文件的引用,但配置也可以完全在运行时完成,因此无法保证甚至有配置文件,但你可以试试看
log4net.Config.XmlConfigurator.m_repositoryName2ConfigAndWatchHandler["log4net-default-repository"]
这可能会向您显示配置文件的位置。
文件名更狡猾,因为
这是类似的示例:
public static void ChangeRemoteAddress(System.Net.IPAddress remoteAddressIp)
{
var hier = log4net.LogManager.GetRepository() as Hierarchy;
if (hier == null)
{
Console.WriteLine("Unable to change Syslog filename, null hierarchy");
return;
}
var sysLogAppender =
(SyslogAppender)hier.GetAppenders().
First(appender => appender.Name.Equals("UdpAppender",
StringComparison.InvariantCultureIgnoreCase));
if (null == sysLogAppender)
{
Console.WriteLine("Unable to change Syslog filename, appender not found");
return;
}
sysLogAppender.RemoteAddress = remoteAddressIp;
sysLogAppender.ActivateOptions();
}
我得到了“层次结构”,然后可以得到附加程序并通过它的名称检查我想要的那个。就我而言,我希望能够以编程方式更改我的 UDP 附加程序的远程地址,但您可以通过这种方式处理任何预定义的“设置”。如果您使用自定义“设置”会有点麻烦,但这应该可以帮助您。
因此,这将使您能够访问 XML 配置文件(作为对象)。例如,滚动文件附加程序的日志文件的文件名将以类似的方式访问。
至于我,dll 必须只返回异常。应用程序可以使用 log4net 或其他记录器并记录来自 dll 的异常。log.config 的路径我通常存储在 app.config appSettings 中。
您可以尝试在 dll 内部制作类似
const string RELATIVE_LOGGER_CONFIG_FILE_PATH="log.config";
string directory=System.IO.Path.GetDirectoryName(Assembly.GetCallingAssembly().Location);
return System.IO.Path.Combine(directory, RELATIVE_LOGGER_CONFIG_FILE_PATH)
,但我认为是不正确的。只需从 dll 中返回异常。
PS 此代码集配置文件为 log4net
log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath));