2012-07-29 3 views

답변

4

log4net에서 "기본 제공"되지 않습니다. 그러나 RollingFileAppender를 사용하고 수동 클래스/메소드를 만들어 로그 파일을 정리/삭제할 수 있습니다. 참고로

, Log4Net: set Max backup files on RollingFileAppender with rolling Date

또 다른 접근 방식을 통해 로그 파일에 최소 잠금 레벨을 설정하는 것입니다 잠긴 파일 피하기 위해 : 너무,

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
+0

고마워요! 하지만 파일을 삭제하려고하면 log4net이 파일을 catch하기 때문에 예외가 발생합니다. log4net에서 로그 파일을 해제하려면 어떻게합니까? –

+1

삭제를 호출하기 전에 CloseFile() 메서드를 사용할 수 있습니다. – Darek

+0

나는 이것이 별개의 질문이지만 Darek이 제안한 것처럼 생각합니다. 우리가 어떻게 일하는지 당신에게 알리고, 이것이 당신에게 효과가 있다면 답변으로 표시하는 것을 잊지 마십시오. – Seany84

6

나는이 문제를 가지고 있습니다.

당신은 당신의 설정이 필요합니다

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
+0

정확히 내가 무엇을 찾고 있었습니까. – cdmckay

+0

완벽한! 간단하게, 나는 그것을 좋아한다 –

+0

나는 이것이 비용과 함께 온다고 생각한다. 아마 누군가 여기서 논평 할 수있다. 이 작업을하기 위해 Log4Net은 파일을 닫고 파일 핸들을 해제합니다. 다음 쓰기 작업을 수행하려면 새 파일 핸들을 할당하고 파일을 열어야하므로 값 비싼 작업입니다. 이것이 "완벽 함"을 보일 수는 있지만 성능이 저하 될 가능성이 큽니다. – Jazimov

2

고마워 나는 로그를 분명히 성공.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

로그 파일을 삭제하는 코드는 다음과 같습니다 : 로그 구성 파일의 어 펜더 블록에서 나는 그 라인에 추가

 RollingFileAppender fileAppender = LogManager.GetRepository() 
         .GetAppenders().FirstOrDefault(appender => appender is RollingFileAppender) as RollingFileAppender; 


     if (fileAppender != null && File.Exists(((RollingFileAppender)fileAppender).File)) 
     { 
      string path = ((RollingFileAppender)fileAppender).File; 
      log4net.Appender.FileAppender curAppender = fileAppender as log4net.Appender.FileAppender; 
      curAppender.File = path; 

      FileStream fs = null; 
      try 
      { 
       fs = new FileStream(path, FileMode.Create); 
      } 
      catch(Exception ex) 
      { 
       (log4net.LogManager.GetLogger(this.GetType())).Error("Could not clear the file log", ex); 
      } 
      finally 
      { 
       if (fs != null) 
       { 
        fs.Close(); 
       } 

      } 
     } 

모든

+0

답장을 참조하십시오. 그것이 내가 당신을 가리킨 방향이라고 믿습니다.다행 이군. – Seany84

1

만약 당신에게 감사를 당신 돈 최소한의 잠금을 가짐으로써 성능에 영향을 미치고 싶지 않다면 (최소한 answer), 최소한의 잠금을 사용하도록 임시로 appender를 구성하고 파일을 삭제 한 다음 기본 동작 되돌리기. 만 RollingFileAppenders을 사용하고

예 :

// Release the lock on the log4net log files 
var appenders = log4net.LogManager.GetRepository().GetAppenders(); 
foreach (var appender in appenders) 
{ 
    var rollingFileAppender = appender as log4net.Appender.RollingFileAppender; 
    if (rollingFileAppender != null) 
    { 
     rollingFileAppender.ImmediateFlush = true; 
     rollingFileAppender.LockingModel = new log4net.Appender.FileAppender.MinimalLock(); 
     rollingFileAppender.ActivateOptions(); 
    } 
} 

파일은 이제 무료는 문제없이 삭제 될 수 있습니다.

0

는 단순히 응용 프로그램의 시작 명령

File.WriteAllText("C:/Users.../log.xml", ""); 

를 사용합니다.

관련 문제