我有一个包含10个dll的项目,每个dll使用log4net进行记录。该项目不是由我开始的,我得到了这样的,我需要继续它。因为这是我第一次使用log4net,所以我想知道如何在运行时获取配置文件(xml)和日志文件(记录器写入日志的文件)。我使用断点停止应用程序执行,我希望能够使用快速监视窗口获取这些参数。
感谢您的帮助。
答案 0 :(得分:2)
就我个人而言,我认为您可能会采用错误的方式,因为您最好尝试查看log4net的配置方式,并从中确定记录信息的位置。
通常的起始位置是app.config文件,它可能包含log4net配置本身,或者对另一个外部文件的引用,但是配置也可以在运行时完全完成,所以不能保证甚至有一个配置文件,但您可以尝试查看
log4net.Config.XmlConfigurator.m_repositoryName2ConfigAndWatchHandler["log4net-default-repository"]
可能会显示配置文件的位置。
文件名是tricker,因为
答案 1 :(得分:1)
以下是类似的示例:
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();
}
我得到了“层次结构”,然后可以获取appender并通过其名称检查我想要的那个。在我的情况下,我希望能够以编程方式更改我的UDP appender的远程地址,但您可以通过这种方式处理任何预定义的“设置”。如果你使用自定义'设置'会有点麻烦,但这应该让你去。
因此,这将使您可以访问XML配置文件(作为对象)。例如,滚动文件追加器的日志文件的文件名将以类似的方式访问。
答案 2 :(得分:0)
至于我,dll必须只返回异常。应用程序可以使用log4net或其他loger并记录来自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));