【问题标题】:log4net RollingFileAppender not "rolling" when programmatically configured以编程方式配置时,log4net RollingFileAppender 不“滚动”
【发布时间】:2011-12-19 22:42:33
【问题描述】:

我正在尝试以编程方式在 C# 中创建滚动文件附加程序。我使用的是 Visual Studios 2008。我使用的是 log4net 版本 1.2.0.30714。

我的主要问题是我的滚动文件附加程序就像一个文件附加程序。日志文件不会根据我给它的任何大小或日期标准滚动。以下是我的配置,我将不胜感激任何见解或建议。代码下面是我尝试过的一些想法。

string path = "Logs\";
string filename = "test.log";

if (!Directory.Exists(path))
{
    Directory.CreateDirectory(path);
}

log4net.Layout.PatternLayout patternLayout = new log4net.Layout.PatternLayout("[%d] %l %n   - %m %n%n");
patternLayout.ActivateOptions();

RollingFileAppender appender = new RollingFileAppender();
appender.Threshold = Level.ALL;
appender.StaticLogFileName = false;
appender.CountDirection = 0; // Makes the logs count 1, 2, 3
appender.RollingStyle = RollingFileAppender.RollingMode.Size;
appender.MaximumFileSize = "1KB";
appender.MaxFileSize = 1 * 1024; // 1 KB
appender.MaxSizeRollBackups = 5;
appender.DatePattern = "yy.MM.dd.hh.mm.ss";
appender.Layout = patternLayout;
appender.Name = "QTracImportHelper";
appender.ImmediateFlush = true;
appender.File = filename;
appender.Writer = new StreamWriter(path + filename, true);
appender.ActivateOptions();

Hierarchy hierarchy = (Hierarchy)LogManager.GetLoggerRepository();
hierarchy.Root.AddAppender(appender);
hierarchy.Configured = true;

我注意到删除 StreamWriter 会导致根本没有创建文件,但没有例外。删除文件名会导致 log4net 中出现异常。我尝试同时使用 MaxFileSize 和 MaximumFileSize 都无济于事,并将滚动阶梯更改为 Date 和 Composite。此外,如果写入器流格式错误,它将创建与不包含 File 属性相同的异常({"Value cannot be null.\r\nParameter name: fileName"}{System.ArgumentNullException})。

【问题讨论】:

  • 顺便说一句,您使用的 datePattern 指定每秒滚动一次.....

标签: c# log4net log4net-configuration rollingfileappender log4net-appender


【解决方案1】:

我认为这可能是由于您在调用 ActivateOptions() 之前直接提供了“Writer”参数。编写器应该由 RollingLogFileAppender 打开,而不是从外部打开。它只是因为继承自 TextWriterAppender 的类而暴露出来的。

//Don't do this:
//appender.Writer = new StreamWriter(path + filename, true);
//Do fully-qualify the file name:
appender.File = Path.Combine(path, filename);

【讨论】:

  • 这似乎可行,尽管它似乎不适用于所有路径。我仍在调查原因。
猜你喜欢
  • 1970-01-01
  • 2016-11-08
  • 2015-03-10
  • 2011-08-31
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多