본문 바로가기

TechLog

닷넷에서 디버그 출력을 파일로 저장하기

닷넷에서 디버그 출력을 파일로 저장하기

닷 넷 응용 프로그램을 작성할 때, 디버그 정보를 디버그 출력 창에 출력하는 것 이외에도 파일로 로그를 남기는 기능이 필요할 때가 있습니다. System.Diagnostics 네임스페이스에서는 리스너 컬렉션을 제공함으로써 이러한 기능을 제공하고 있습니다.

 

 

안녕하세요 : )

 

닷 넷 프레임워크를 사용하면서, 디버깅을 할 때의 간단한 팁을 소개할까 합니다. Kenial의 경우에는 System.Diagnostics.Debug.WriteLine() 메서드만으로는 디버그 정보를 파일로 남기기가 불편해서, 따로 디버그 내용을 파일로 출력하는 클래스를 만들어 썼었는데, 알고보니 그런 기능을 제공하는 개체가 있었습니다 ^^;

 

그럼 시작합니다 : )

 

 

TextWriterTraceListener 클래스

 

사실 소스 코드가 간단해서, 그렇게 설명할 것도 별로 없을 것 같다. 일단 소스를 보자 :

 

StreamWriter writer = new StreamWriter(

    File.Open("C:\\Log.txt", FileMode.Append));

TextWriterTraceListener listener = new TextWriterTraceListener(writer);

 

Debug.Listeners.Add(listener);

 

Debug.WriteLine(string.Format("{0} : Test Log.", DateTime.Now));

Debug.WriteLine(string.Format("{0} : Test Log2.", DateTime.Now));

Debug.Flush();

writer.Close();

 

StreamWriter string을 특정 스트림에 기록하기 위한 출력 스트림이다. 위에서 선언된 writer C드라이브 루트에 Append 모드로 파일을 열고, 스트림에 파일을 연결한다. writer 출력 스트림으로 출력되는 내용은 c:\log.txt 파일에 기록되게 된다.

 

TextWriterTraceListener는 이런 문자 기반 출력 스트림에 listener를 연결, 특정 내용이 수신될 때 마다(여기서는 Debug.Write() 관련 작업이 일어날 때 마다) 해당 출력 스트림으로 수신된 내용을 전달하며,

 

Debug.Listeners Debug에서 뭔가가 출력됐을 때 그 내용을 받을 listener들의 컬렉션이다. 이 컬렉션에 저장된 리스너라면 모두 해당 내용을 받게 된다.

 

위 코드를 실행하면 디버그 창에 아래와 같은 내용이 출력되며 :

 

    clip_image001

 

c:\log.txt 파일에도 같은 내용이 기록된다 :

 

    clip_image002

 

 

정리

 

아 주 간단한 내용입니다만, Trace와 함께 활용한다면 실제 프로그램을 배포하고 난 후 로그 정보를 모을 때도 유용하게 사용할 수 있을 것입니다. Trace에도 Listeners 컬렉션이 존재하며, 마찬가지로 TextWriterTraceListener를 추가함으로써 디버그 메시지를 수신할 수 있습니다.

 

그럼 : )