[英]Changing log4net file name at runtime without changing the appender
我想在運行時更改我的日志名稱而不更改appender。 基本上,一旦它到達某一特定的時間,我希望能夠使用不同的文件。
這就是我的appender的樣子:
<appender name="info" type="log4net.Appender.RollingFileAppender">
<file value="logs\" />
<datePattern value="yyyyMMdd'_INFO.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline[%date]-%level-%logger[%M]- Linea:%L - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
<param name="LevelMax" value="INFO"/>
</filter>
</appender>
這是我遍歷appender的函數:
public void SetLogFile(string fileName)
{
foreach (var appender in log.Logger.Repository.GetAppenders())
{
try
{
((log4net.Appender.FileAppender)appender).File = fileName;
((log4net.Appender.FileAppender)appender).ActivateOptions();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
SetLogFile("log1.txt");
這為此特定示例創建了以下文件:
log1.txt20171221_INFO.log
我想將我的日志文件命名為log1.txt
而不是將log4net.config
文件中的datePattern
設置為與名稱連接,但我無法弄清楚如何在不更改log4net.config
appender配置的情況下執行此操作。
在使用RollFileAppender時,您必須更改RollingStyle並相應地設置路徑。
foreach (var appender in log.Logger.Repository.GetAppenders())
{
try
{
string file = Path.GetDirectoryName(((log4net.Appender.RollingFileAppender)appender).File);
string filename = Path.Combine(file, fileName);
switch (((log4net.Appender.RollingFileAppender)appender).RollingStyle)
{
case log4net.Appender.RollingFileAppender.RollingMode.Date:
((log4net.Appender.RollingFileAppender)appender).RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Once;
break;
case log4net.Appender.RollingFileAppender.RollingMode.Composite:
((log4net.Appender.RollingFileAppender)appender).RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;
break;
}
((log4net.Appender.FileAppender)appender).File = filename;
((log4net.Appender.FileAppender)appender).ActivateOptions();
}
catch (Exception ex) {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.