1

Я пытаюсь запрограммировать создание скользящего файла в C#. Я использую Visual Studios 2008. Я использую log4net версии 1.2.0.30714.log4net RollingFileAppender не «перекатывается» при программной настройке

Моя основная проблема заключается в том, что мой загружаемый файл-приложение действует как файл-приложение. Файл журнала не будет катиться на основе каких-либо критериев размера или даты, которые я им даю. Ниже приведена моя конфигурация, и я был бы признателен за любые идеи или предложения. Ниже кода некоторые из идей, которые я пробовал.

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. Кроме того, если поток записи искажен, он создаст то же исключение, что и не включая свойство файла ({«Значение не может быть пустым. \ R \ nParameter name: fileName»} {System.ArgumentNullException}).

Любые идеи?

+0

BTW, то datePattern вы использовали, указывает катиться каждый второй ..... –

ответ

2

Я думаю, это может быть связано с тем, что вы подали параметр «Writer» непосредственно перед вызовом ActivateOptions(). Писатель должен открываться 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); 
+0

Это, кажется, работает, хотя это не похоже на работу для всех путей. Я все еще расследую, почему. – Fletcher

Смежные вопросы