为什么说是正规呢?是因为还有不正规的方法
1.先说正规方法
输出日志前,使用log4net提供的工具log4net.Util.PatternString来进行参数替换
在xml里面这样写
<file type="log4net.Util.PatternString" value="log\%property{fname}.log"/>
在c#里面这样写
log4net.GlobalContext.Properties["fname"] = m_siteId;
log4net.Config.XmlConfigurator.Configure();
*******注意*************************************
一定要去掉下面这句,否则可能导致程序死锁
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
static ILog logger;
log4net.GlobalContext.Properties["fname"] = m_siteId;
log4net.Config.XmlConfigurator.Configure();
logger = LogManager.GetLogger("DEBUG");
logger.Debug("test");
<log4net debug="true">
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<!-- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> -->
<file type="log4net.Util.PatternString" value="log\%property{fname}.log"/>
<rollingStyle value="Date" />
<param name="MaximumFileSize" value="10000KB" />
<param name="Encoding" value="utf-8" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%date] %level [%thread][%c{1}:%line] - %m%n" />
</layout>
</appender>
</log4net>
2.不正规的方法
打开日志后,动态修改文件名字,不过这样做的缺点是会输出一个空白的修改前的日志文件,很不爽。
var appenders = logger.Logger.Repository.GetAppenders();
foreach (var app in appenders)
{
var ra = app as RollingFileAppender;
ra.File = folder;
ra.ActivateOptions();
}