代码之家  ›  专栏  ›  技术社区  ›  Stefan Valianu

如何让log4net根据实例化记录器的类写入文件名?

  •  4
  • Stefan Valianu  · 技术社区  · 14 年前

    这就是我的困境。我有一个 RollingFileAppender BufferingForwardingAppender . 转发appender写入文件appender。我的文件追加器需要一个要写入的文件。我想把文件命名为 %Called Assembly Type%log.txt ,其中%Called Assembly Type%是被调用的程序集类型(gasp!)

    从名为“的服务调用” OkilyDokily

    var log4NetLogger = LogManager.GetLogger(GetMyAssemblyName());
    log4NetLogger.LogInfo("Toodleoo");
    

    从名为“的服务调用” Neighborinos ":

    var log4NetLogger=LogManager.GetLogger(GetMyAssemblyName());
    

    我希望有2个日志文件,其中一个名为 OkilyDokilylog.txt 还有一个叫 Neighborinoslog.txt

    有没有办法在log4net中做到这一点?是我的 缓冲转发出现 会成为一个问题吗?我尝试过这种配置,但是 %logger 只是转换成字符串 logger

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
        <file type="log4net.Util.PatternString">
            <conversionPattern value="C:\testlogs\%logger log.txt" />
        </file>
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="-1" />
        <maximumFileSize value="5KB" />
        <staticLogFileName value="true" />
        <countDirection value="1"/>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%-8level %-21date{M/d/yyyy H:m:ss} %message%newline" />
        </layout>
    </appender>
    
    1 回复  |  直到 11 年前
        1
  •  2
  •   code4life    14 年前

    也许这个小道消息可以帮到你:你需要覆盖 File 属性,调用 ActivateOptions 方法,如下所示:

    var myPath = "C:\\";
    var log = LogManager.GetLogger(typeof(MySpecificAssembly).Name);
    XmlConfigurator.Configure();
    
    var rfa = (RollingFileAppender)LogManager.GetRepository().GetAppenders()
        .First(c => c.Name == "RollingFileAppender");
    
    rfa.File = myPath + typeof(MySpecificAssembly).Name + ".log";
    rfa.ActivateOptions();