1

C#에서 롤링 파일 작성기를 프로그래밍 방식으로 만들려고합니다. Visual Studio 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로 변경하는 것뿐만 아니라 아무 소용이없는 시도도했다. 또한 작성자 스트림의 형식이 잘못되면 File 속성 ({ "값은 null 일 수 없습니다. \ r \ n 매개 변수 이름 : fileName"} {System.ArgumentNullException})을 포함하지 않는 것과 동일한 예외가 생성됩니다.

아이디어가 있으십니까?

+0

BTW, 당신이 사용한 datePattern은, 모든 경로에 대한 작동하지 않지만,이 작업을 표시 매 초마다 ..... –

답변

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); 
+0

롤 지정합니다. 나는 아직도 이유를 조사하고있다. – Fletcher