Log4net:运行时配置xml文件和文本日志文件位置

时间:2012-10-15 13:48:05

标签: c# log4net

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

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

通常的起始位置是app.config文件,它可能包含log4net配置本身,或者对另一个外部文件的引用,但是配置也可以在运行时完全完成,所以不能保证甚至有一个配置文件,但您可以尝试查看

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

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

文件名是tricker,因为

  • 由于日志记录可以转到其他设备(例如控制台或数据库),因此可能没有文件
  • 由于禁用了日志记录,因此可能没有文件。
  • 您可以登录两个或多个文件
  • 文件名可能取决于类/ dll
  • 可以为一个类启用日志记录,为另一个类禁用日志记录。

答案 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));