我试图以编程方式在C#中创建一个滚动文件追加器。我正在使用Visual Studios 2008.我使用的是log4net版本1.2.0.30714。
我的主要问题是我的滚动文件appender就像一个文件追加器。日志文件不会根据我提供的任何大小或日期标准滚动。以下是我的配置,我将不胜感激任何见解或建议。代码下面是我尝试过的一些想法。
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不能为null。\ r \ nParameter name:fileName”} {System.ArgumentNullException}。)
有什么想法吗?
答案 0 :(得分:2)
我认为这可能是因为您在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);