원문 : Writing Debug and Trace Messages - BlackWasp

복잡한 소프트웨어는 디버깅 및 로깅 코드로 모니터링 하기 쉽게 만들어야 한다. 정말로..
고생해 보면 알아요.


What are Debug and Trace Messages?

로그는 복잡한 소프트웨에서 사용자 인터페이스(UI)만으로 동작을 관찰하기 힘들때 사용되어 진다. 로깅 메시지는 프로그램의 문제를 파악하는데 많은 도움이 된다. .NET Framework 에서는 Debug 와 Trace 메시지를 제공해 준다.

Debug messages
System.Diagnostics 네임스페이스의 Debug 클래스 사용
Visual Studio로 디버그 모드로 디버깅 시 "지역 창" 에 출력된다.
메시지 작성을 위한 메소드는 Conditional 어트리뷰트와 DEBUG 심벌을 갖는다. 따라서 프로그램이 Release 모드로 컴파일 되었다면 호출되지 않는다. (디버그 메시지가 최종 사용자에게 보여지지 않음과 디버깅 동작으로 프로그램 성능 저하 방지를 보장한다.)

Trace messages
System.Diagnostics 네임스페이스의 Trace 클래스 사용
TRACE 심벌이 정의되었을 때 코드에 포함된다. Visual Studio 는 기본적으로 TRACE 심벌을 포함하여 빌드한다. 따라서 모듈을 debug 또는 release 모드로 빌드하건 TRACE 코드가 모듈에 포함된다. 


Writing Messages

디버그 메시지를 기록하는 가장 간단한 방법으로 디버그 모드에서 프로그램이 실행중일 때 출력창에 메시지를 출력시키는 방법이 있다. Debug, Trace 클래스를 사용하기 위해선 다음 네임스페이스를 using 해준다.

using System.Diagnostics;


Debug, Trace 클래스에는 Write, WriteLine 의 Static 메소드가 존재한다. 하나의 매개변수를 받으며 어떤 타입도 사용될 수 있다. String 타입일 경우 해당 값이 출력되며, 다른 타입일 경우 ToString 메소드의 결과값이 출력된다.

Debug.Write("Application started (Debug)");
Trace.Write("Application stopped (Trace)"); 

Debug.WriteLine("Application started"); 



Categories

출력하려는 디버그 메시지를 카테고리화 할 수 있다. Write, WriteLine 메서드의 두 번째 매개변수를 주면 되며 이 String 타입의 값이 카테고리의 이름이 된다.

Debug.Write("Application started", "Debug");
Debug.WriteLine("Application stopped", "Debug"); 




Indentation

디버그 메시지를 읽기 쉽게 하기 위해 들여쓰기를 할 수 있다. Indent 메소드를 이용하면 들여쓰기를 하고, Unindent 메소드를 호출하면 들여쓰기를 취소한다.

Debug.WriteLine("Application started", "Application");

Debug.Indent();

Debug.WriteLine("Processing input XML", "File Import");

Debug.WriteLine("Imported 300 row(s)", "File Import");

Debug.Unindent();

Debug.WriteLine("Application stopped", "Application");




Writing Messages Conditionally

디버그 메시지를 원하는 조건일때만 출력하고 싶을 경우가 있다. if 또는 switch 조건문안에서 디비그 메시지를 기록해도 되지만 이 방법은 코드 가독성이 떨어진다.
Debug, Trace 클래스는 조건 매개변수를 갖는 Write, WriteLine 메소드를 제공한다. WriteIf, WriteLineIf 메서드가 있으며 이 메소드는 첫 번째 매개번수 값이 true 일 경우만 메시지를 기록한다.

Debug.WriteLineIf(loggingEnabled, "Application started", "Application");



Using Trace Listeners

Debug, Trace 클래스는 Listeners 프로퍼티를 갖는다. Listeners 프로퍼티는 메시지를 받는 trace listener 들을 컬렉션값으로 갖는다. 보통 출력창을 Listener로 갖는데 상황에 따라 다른 Listener에 메시지를 출력해야 될 때가 있다. 

TextWriterTraceListener 라는 Listener는 메지시를 텍스트 파일에 출력한다. 생성자에서 출력할 파일을 지정하며, 파일이 존재하지 않을 경우 새로 생성한다. Listeners 프로퍼티에 TextWriterTraceListener 를 추가한 후, 응용프로그램 종료 전에 Close 메소드를 호출해줘야 한다.

아래 예는 Windows Form 응용프로그램에서의 사용 예이다.
메인 폼이 열리기 전에 TextWriterTraceListener 를 추가하고, 메인 폼이 종료된 후 Close 메소드를 호출해준다. Close 메소드 호출 시 모든 메시지가 지정한 파일에 기록된다. 

Debug.Listeners.Add(new TextWriterTraceListener(@"c:\temp\debug.log"));

Application.Run(new MainForm());

Debug.Close();



@
Posted by six605
,