log4net RollingFileAppender не работает при программной настройке

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


person Fletcher    schedule 19.12.2011    source источник
comment
Кстати, используемый вами datePattern указывает на то, что кататься каждую секунду .....   -  person Mitch Wheat    schedule 20.12.2011


Ответы (1)


Я думаю, это может быть связано с тем, что вы указали параметр «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);
person csharptest.net    schedule 19.12.2011
comment
Кажется, это работает, хотя не для всех путей. Я все еще пытаюсь понять, почему. - person Fletcher; 20.12.2011