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

时间:2010-06-28 16:46:08

标签: c# log4net

这是我的困境。我有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());
log4NetLogger.LogInfo("Toodleoo");

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

有没有办法在log4net中执行此操作?我的BufferingForwardingAppender会成为一个问题吗?我已尝试过此配置,但%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 个答案:

答案 0 :(得分:2)

也许这个小小的问题可能会帮助你:你需要覆盖 RollingFileAppender 并在修改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();