我想知道如何使用Log4net动态分配文件名。我的应用程序是根据用户输入动态创建10个不同的文件,后来根据名称需要获取相应的文件名和信息写给它
例如,在我的应用程序中,基于我对每个xml文件的buisness要求,应该创建一个与xml文件同名的相应日志文件。后来每当我对xml文件进行任何修改时,一个条目都需要在相应的日志文件
请帮忙。我无法控制相应的日志来编写它
答案 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文件并再次保存(无需更改任何内容)
希望这有帮助。