首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取C#格式的log4net日志文件

获取C#格式的log4net日志文件
EN

Stack Overflow用户
提问于 2009-08-27 21:08:53
回答 7查看 54.5K关注 0票数 69

这是我对log4net的配置:

<log4net>
    <appender name="MyLogger" type="log4net.Appender.RollingFileAppender">
        <file value="MyLog.log" />
        <appendToFile value="true" /> 
        <rollingStyle value="Size"/>
        <maxSizeRollBackups value="20"/>
        <maximumFileSize value="1000KB"/>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss},%p,%m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="MyLogger" />
    </root>
</log4net>

在C#中,我尝试获取日志文件的名称(即MyLog.log)。我在谷歌上搜索并尝试了很多东西,但都没有成功。有什么帮助吗?

谢谢!

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2009-08-27 21:45:55

在您的情况下,解决方案非常简单;只需使用以下代码:

var rootAppender = ((Hierarchy)LogManager.GetRepository())
                                         .Root.Appenders.OfType<FileAppender>()
                                         .FirstOrDefault();

string filename = rootAppender != null ? rootAppender.File : string.Empty;
票数 105
EN

Stack Overflow用户

发布于 2015-05-25 19:39:44

当有多个附加文件时,您可能希望按名称获取它们。此外,为了确保即使没有被根节点引用,也能获得附加器,下面的代码很有帮助:

public static string GetLogFileName(string name)
{
     var rootAppender = LogManager.GetRepository()
                                  .GetAppenders()
                                  .OfType<FileAppender>()
                                  .FirstOrDefault(fa => fa.Name == name);

     return rootAppender != null ? rootAppender.File : string.Empty;
}
票数 36
EN

Stack Overflow用户

发布于 2014-08-07 03:06:40

因为我已经在类中定义了一个记录器,所以我只是使用它。需要注意的一件事是,可能有多个附加器,通常第一个附加器是控制台(它没有文件)。这是我的解决方案。

using log4net;
using log4net.Appender;
using log4net.Repository;

namespace MyNameSpace {
public class MyClass {

    private static readonly ILog logger = LogManager.GetLogger(typeof(MyClass));

    public String GetLogFileName() {

        String filename = null;

        IAppender[] appenders = logger.Logger.Repository.GetAppenders();
        // Check each appender this logger has
        foreach (IAppender appender in appenders) {
            Type t = appender.GetType();
            // Get the file name from the first FileAppender found and return
            if (t.Equals(typeof(FileAppender)) || t.Equals(typeof(RollingFileAppender))) {
                filename = ((FileAppender)appender).File;
                break;
            }
        }
        return filename;
    }
}

}

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1343749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档