从log4net的配置文件中检索文件值

时间:2012-10-29 18:10:15

标签: c# logging log4net log4net-configuration

我陷入困境,我相信我需要知道用户在logging.xml中指定的日志文件的名称。具体来说,我正在尝试检索value元素中file属性的值,如下所示(taken from the log4net docs

  

有关完整详细信息,请参阅SDK参考条目:   log4net.Appender.FileAppender。
       以下示例说明如何配置FileAppender以将消息写入文件。指定的文件是log-file.txt。文件   每次登录时都会附加而不是覆盖   过程开始。

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="log-file.txt" />
    <appendToFile value="true" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
</appender>

当我使用以下代码遍历appender时:

log4net.Repository.ILoggerRepository repo = LogManager.GetRepository();
foreach (log4net.Appender.IAppender appender in repo.GetAppenders())
{
    FileAppender fa = appender as FileAppender;
}

我无法在fa对象中的任何位置找到值“log-file.txt”。也许我错过了它,因为在调试器中暴露了很多成员和数据。

有人可以建议一种方法来获得这个值吗?

1 个答案:

答案 0 :(得分:1)

FileAppender具有属性File,其中包含将写入日志记录的文件的路径。但在开始寻找此属性之前,请验证appender的Name - 您可以配置多个FileAppenders

另请注意,RollingFileAppender也符合条件appender is FileAppender,因为它来自FileAppender

string file = repo.GetAppenders()
                  .OfType<FileAppender>()
                  .Where(fa => fa.Name == "FileAppender")
                  .Single()
                  .Name;
相关问题