2013-02-15 2 views
1

로깅을 위해 SLF를 사용하는 프로그램이 있습니다. 이 프로그램은 연중 무휴로 운영되며 나중에 검토 할 수 있도록 매일 밤 원격 서버에 로그 파일을 업로드하고 싶습니다.SLF 파일 잠금 해제

내 질문은 어떻게 프로그램을 닫지 않고 로그 파일 잠금을 해제합니까?

로깅을 일시 중단하고, 로그를 업로드하고, 로그 파일을 삭제하거나, 내용을 지우고, 로깅을 재개하려고합니다.

ILogger logger = LoggerService.GetLogger(typeof(TaskScheduler).FullName); 

// Other initialization here 

foreach (var task in managedTasks.OrderBy(t => t.Priority)) 
{ 
    if (task.NextRunTime <= DateTime.Now) 
    { 
     dataManager.CurrentStatus = AppStatus.Running; 
     if (task.Name == "Log Sender") 
     { 
      logger = null; 
     } 

     // Run the task 

     if (task.Name == "Log Sender") 
     { 
      logger = LoggerService.GetLogger(typeof(TaskScheduler).FullName); 
     } 

     dataManager.CurrentStatus = AppStatus.Idle; 
    } 
} 

현재이 작업을 수행 할 때 파일이 여전히 작업 스케줄러에 의해 잠겨 있기 때문에 여전히 IOException이 발생합니다.

편집 : 나는 도움이되는 경우 log4net 이상의 SLF를 사용하고 있습니다.

+0

로그 파일을 해제하고 나중에 로깅을 재개 할 수있는 사용자 지정 로그 작성기를 작성하십시오. – usr

+0

"SLF"란 무엇입니까? –

+0

안녕하세요 John, SLF는 단순 로깅 Facade입니다. http://www.codeproject.com/Articles/36447/A-Fa-c3-a7ade-for-Simple-and-Framework-Independent – Ben

답변

0

기술적 인 문제보다는 설계상의 문제로 생각합니다. 개별 파일에 매일 이벤트를 기록하고 다음 날에는 어제의 로그 파일로 원하는 모든 작업을 수행 할 수 있습니다. 필요에 따라 로그 기간을 좁힐 수 있습니다 (예 : 12 시간마다).

+0

감사합니다, 조언을 주셔서 감사합니다. 나는이 선을 따라 뭔가를해야만 할 것 같습니다. 도와 주셔서 감사합니다. – Ben

+0

@ 벤 : 사실 이것은 "전략적 사고"에 관한 것입니다. 그것은 옳은 대답이 아니라 옳은 질문에 대한 답입니다. – Xaqron

0

이 질문을 게시하고 권장 사항을 받아 내 디자인을 다시 생각해보십시오. 각 날짜마다 롤링 로그 파일을 만드는 방법을 살펴 보았습니다. 나는 완전히 내 문제를 해결하는이 걸쳐 일어난

<appender name="InfoRollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net"> 
    <param name="File" value="log.txt" /> 
    <param name="StaticLogFileName" value="true"/> 
    <maximumFileSize value="1024KB" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%logger: %date{dd MMM yyyy HH:mm:ss} [%thread] %-5level - %message %newline" /> 
    </layout> 
</appender> 

가 나는 "MinimalLock"이 로그의 내용을 당겨 나를 활성화를 포함하도록 lockingModel을 따라 내의 app.config에서 log4net의 펜더를 구성, 업로드 지정된 시간/날짜 범위에 대해 별도의 로그 파일을 만들지 않고도 로컬 로그를 지울 수 있습니다.

다시 한 번 도움을 주신 모든 분들께 진심으로 감사드립니다.