1

我有一个包含 10 个 dll 的项目,每个 dll 使用 log4net 进行日志记录。该项目不是我开始的,我是这样得到的,我需要继续它。因为这是我第一次使用 log4net,所以我想知道如何在运行时获取配置文件 (xml) 和日志文件(记录器写入日志的文件)。我使用断点停止应用程序执行,我希望能够使用快速监视窗口来获取这些参数。

感谢帮助。

4

3 回答 3

2

就个人而言,我认为您可能会走错路,因为您最好尝试查看 log4net 的配置方式并从中确定它记录信息的位置。

通常的起始位置是 app.config 文件,其中可能包含 log4net 配置本身,或者对另一个外部文件的引用,但配置也可以完全在运行时完成,因此无法保证甚至有配置文件,但你可以试试看

log4net.Config.XmlConfigurator.m_repositoryName2ConfigAndWatchHandler["log4net-default-repository"]

这可能会向您显示配置文件的位置。

文件名更狡猾,因为

  • 可能没有文件,因为日志记录可能会转到另一个设备(例如控制台或数据库)
  • 由于禁用了日志记录,因此可能没有文件。
  • 您可能正在登录两个或更多文件
  • 文件名可能取决于类/dll
  • 可以为一个类启用日志记录,而对另一个类禁用日志记录。
于 2012-10-15T15:15:42.247 回答
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();
    }

我得到了“层次结构”,然后可以得到附加程序并通过它的名称检查我想要的那个。就我而言,我希望能够以编程方式更改我的 UDP 附加程序的远程地址,但您可以通过这种方式处理任何预定义的“设置”。如果您使用自定义“设置”会有点麻烦,但这应该可以帮助您。

因此,这将使您能够访问 XML 配置文件(作为对象)。例如,滚动文件附加程序的日志文件的文件名将以类似的方式访问。

于 2012-10-15T14:48:19.510 回答
0

至于我,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));   
于 2012-10-15T14:03:37.547 回答