2014-04-25 5 views
0

Windows 작업 스케줄러를 사용하여 자동으로 실행되도록 예약 된 C# 콘솔 응용 프로그램에서 작업하고 있습니다. 해당 응용 프로그램에서 타임 스탬프가있는 단계별로 실행되는 정보를 기록하고 싶습니다.타사 로거를 사용하지 않고 C# 응용 프로그램에 로그인

또한 로그 파일 크기가 10MB를 초과하지 않도록하고 새 파일이 생성 될 때마다 새 파일로 분리해야합니다. 5 개 이상의 파일이있는 경우 5 개 이상의 로그 파일이 있어야하며 가장 오래된 파일이 자동으로 삭제되어야합니다.

내가 이러한 경우 Log4net 등 모든 제 3 자 로거를 사용하도록 허용하고 있지 않다 내가 어떤 붙박이 마이크로 소프트의 기능이나 클래스를 사용하여이 문제에 대한 해결책을해야합니까. 나는 커스텀 코드를 기꺼이 사용한다.

FileInfo fi = new FileInfo(logFilename); 
var size = fi.Length; 

크기가있다 : 나는, 어떤 포인터가

+1

'파일을 삭제하고 분할하는 것이 조금 문제가됩니까?'라는 것은 무엇을 의미합니까? 파일이 5GB에 도달하면 아카이브 이름으로 이름을 바꾼 다음 새 기본 로그 파일을 작성해야한다고 생각하지 않습니다. 동시에 5 개 이상의 파일이 있는지 확인하고, 그렇다면 가장 오래된 파일을 삭제하십시오. 이 모든 것은 File/Directory 클래스에 내장되어 있습니다. –

+1

* 제 3 자 로거를 Log4net 등으로 사용할 수 없습니다. * ** 왜? ** 숙제? –

+0

@Simon Clough 정확히, 모든 로그 단계에서 크기와 파일 수를 확인해야합니다. – Akshay

답변

0

는 C#을 사용하여 파일의 크기를 얻기 위해 도움이 될 데이터를 기록 할 수 있어요하지만 파일을 삭제하고 분할하는 것은 약간의 문제입니다 파일 크기 (바이트). 5GB보다 크지 않은지 확인하려면 5 * 1024 * 1024로 확인하십시오.

아카이브 파일 사용에 로그 파일의 이름을 변경하려면 :

System.IO.File.Move(logFilename, archiveFileName); 

아카이브 파일 이름은 날짜 접미사 또는 그와 같은 단순한 뭔가 당신의 로그 파일 이름이 될 수 있습니다. 사용하여 얼마나 많은 당신이 하나 개의 폴더에있는 모든 로그 파일이 가정

, 당신은 셀 수 :

int fileCount = Directory.GetFiles(logFileFolder).Length; 

가 (처음 다섯 제외) 가장 오래된 파일을 삭제하려면 같은 것을 사용

foreach (var fileInfo in new DirectoryInfo(logFileFolder) 
    .GetFiles().OrderByDescending(f => f.LastWriteTime).Skip(5)) 
{ 
    fileInfo.Delete(); 
} 

그게 전부라고 생각합니다. 로그 문을 작성할 때마다 호출되는 메소드에서 이것을 마무리하십시오.

Microsoft 준비 라이브러리를 사용하려면 Enterprise Library을 확인하십시오. 여기에는 로깅 어플리케이션 블록이 포함됩니다. 소스 코드를 다운로드하고 직접 빌드하면 DLL 다운로드 제한으로부터 자유롭게 될 것이라고 생각합니다.

그러나 NLog와 같은 다른 오픈 소스 로깅 프레임 워크의 소스를 다운로드하여 사용할 수도 있습니다.

+0

도움을 주셔서 고마워요, 제가 찾고있는 것을 얻었습니다. – Akshay

관련 문제