log4net动态文件名分配

时间:2009-07-22 12:44:33

标签: log4net

我想知道如何使用Log4net动态分配文件名。我的应用程序是根据用户输入动态创建10个不同的文件,后来根据名称需要获取相应的文件名和信息写给它

例如,在我的应用程序中,基于我对每个xml文件的buisness要求,应该创建一个与xml文件同名的相应日志文件。后来每当我对xml文件进行任何修改时,一个条目都需要在相应的日志文件

请帮忙。我无法控制相应的日志来编写它

1 个答案:

答案 0 :(得分:3)

没有这样做,但可能有很多方法可以做到这一点,所以这可能不是最好的方法,但它应该有用

public OpenLogFile(string fileName)
{
    log4net.Layout.ILayout layout = new log4net.Layout.PatternLayout("%d [%t]%-5p : - %m%n");;          
    log4net.Appender.FileAppender appender = new log4net.Appender.FileAppender(layout ,    filename);
    appender.Threshold = log4net.Core.Level.Info;
    log4net.Config.BasicConfigurator.Configure(appender);
}

然后在需要切换文件时调用OpenLogfile。

您可能需要调整布局或追加者类型。

此方法的一大缺点是您丢失了xml配置并且能够在运行时更改设置。因此,更好的方法是在xml文件中配置appender以使用属性

例如

file type="log4net.Util.PatternString" value="Logfiles\Log_For_%property{MyLogFileName}"  

然后在您的代码中,您可以更改属性

log4net.GlobalContext.Properties["MyLogFileName"] =  ...;

棘手的一点是让log4net重新加载自己。我还没有看过这个文档,所以我不知道是否有办法强制重新加载。如果您再次调用log4net.Config.XmlConfigurator.ConfigureAndWatch,它可能会有效。否则它应该工作,如果您打开xml文件并再次保存(无需更改任何内容)

希望这有帮助。