2

오늘은 log4net을 사용하기 시작했으며 지금까지 정말 좋아합니다. 현재 로깅 기능을 유지하려면 응용 프로그램을 시작할 때마다 응용 프로그램에서 새 로그 파일을 만들어야합니다. 로그 파일 이름에는 날짜 및 시간 스탬프가 인코딩되어 있습니다. 현재 XmlConfigurator을 통해 log4net을 구성했는데, 이는 RollingFileAppender의 파일 이름이 구성 XML 파일에 하드 코드 된 것을 제외하고는 훌륭하게 작동합니다.XML 파일 * 및 * 코드를 통해 log4net appenders 구성

XmlConfigurator을 계속 사용하고 싶지만 Configure()을 호출 한 후 RollingFileAppender에 도착하고 코드에서 동적으로 생성 된 문자열로 변경해야합니다. 샘플 documentation online은 지금 당장 다운 된 것처럼 보이지만 SDK 참조를 뚫고 보았습니다. HeirarchyGetAppenders()을 사용하여 필요한 작업을 수행 할 수있는 것처럼 보입니다. 나는 올바른 길을 가고 있는가?

좋아, 나는이에 자상을 가져다가 작동하지 않았다 다음 코드를 시도 :

private static readonly ILog _log = LogManager.GetLogger(typeof(GUI)); 
// in the config file, I've set the filename to example.log, and it works 
XmlConfigurator.Configure(new FileInfo("log_config.xml")); 
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy; 
if(hierarchy != null) { 
    // get the appenders 
    IAppender[] appenders = hierarchy.GetAppenders(); 
    // change the filename for the RollingFileAppender 
    foreach(IAppender a in appenders) { 
     RollingFileAppender rfa = a as RollingFileAppender; 
     if(rfa == null) 
      continue; 
     rfa.File = "newfile.log"; // no runtime error, but doesn't work. 
    } 
} 
_log.Info("Application started"); 

답변

2

롤링 파일 어 펜더를 필요로이 경우에는 수행을? 만약 당신이 정상적인 파일 appender를 사용한다면 나는 당신의 코드가 원하는 결과를 만들어 낼 것이라고 기대한다.

편집 : 어 펜더에서 ActivateOptions()을 호출하면 RollingFile Appender와 함께 작동 할 수 있습니다.

+0

절대적으로 올바른! 고맙습니다! – Dave

8

이 조각을 시도해보십시오

XmlConfigurator.Configure(); 

log4net.Repository.ILoggerRepository repo = LogManager.GetRepository(); 
foreach (log4net.Appender.IAppender appender in repo.GetAppenders()) 
{ 
if (appender.Name.CompareTo("RollingFileAppender") == 0 && appender is log4net.Appender.RollingFileAppender) 
{ 
    var appndr = appender as log4net.Appender.RollingFileAppender; 
    string logPath = "MyApplication.log"; 
    appndr.File = logPath; 
    appndr.ActivateOptions(); 
} 

내가 게시 한 비슷한 기사 here

+0

구성에 대한 호출에서 구성에 사용되는 XML 파일을 지정해야한다는 점을 제외하고는 더 멋진 구현을 위해 +1. – Dave

+0

@Dave : 아니요. 'Configure()'를 호출하면 해당 프로젝트의'app.config' 또는'web.config'가 사용됩니다. – Aren

+0

@Aren 아, 설명해 주셔서 감사합니다. – Dave