트레이싱

트레이싱 (tracing)은 프로그램의 실행에 관한 정보를 기록하기 위한 로깅의 특별한 사용이다. 이 정보는 보통 프로그래머가 디버깅을 목적으로 사용된다. 또는 시스템 관리자나 기술 지원 인원 그리고 소프트웨어 감시 툴이 소프트웨어의 일반적인 문제들을 진단하기 위해서, 추가적인 자세한 트레이스 로그를 포함하는 정보로서 사용된다. 트레이싱은 횡단 관심사(cross-cutting concern)이다.

트레이싱과 로깅은 다른 형태들 사이의 명확한 구분은 없지만 트레이싱이라는 용어가 프로그램의 기능 요구 사항(functional requirement)인 로깅에 적용되는 개념은 아니다. 즉 입자물리학 실험에서의 데이터 획득 그리고 로그 선행 기입 같은 외부 소스의 데이터 로깅은 트레이싱에 포함되지 않는다. 프로그램의 사용이나(서버 로그) 운영체제의 이벤트들을 기록한 로그는 시스템 관리자에게 우선적인 관심 대상이다. 이 문서는 디버깅이나 진단 목적의 트레이싱을 다룬다.

이벤트 로깅 대 트레이싱 
이벤트 로깅과 트레이싱을 명확히 구분하는 것은 어렵다. 같은 기술들이 둘 다에서 사용되기 때문이다. 아래의 테이블은 중요하지만 정확하지는 않은 구분을 목록화했다.

이벤트 로깅 
이벤트 로깅은 시스템 관리자가 진단하고 감사하는데 유용한 정보를 제공한다. (이벤트 메시지들 중에서 기록될 것과 세부 사항에 대한) 이벤트들의 다른 클래스들은 개발 단계 이전에 고려되는 경향이 있다. 많은 이벤트 로깅 기술들은 각 이벤트의 클래스에 고유한 코드가 부여되는 것을 허용하거나 요구한다. 이것은 지역화를 가능케 하고 시스템 관리자가 발생한 문제에 대한 정보를 얻는 것을 쉽게 한다.

이벤트 로깅이 높은 수준의 정보를 기록하는 것을 요구하기 때문에 성능은 종종 비교적 덜 고려된다.

소프트웨어 트레이싱 
소프트웨어 트레이싱은 개발자에게 디버깅을 위한 유용한 정보를 제공한다. 이 정보는 개발 기간 뿐만 아니라 배포 후에도 사용된다. 이벤트 로깅과 다르게, 소프트웨어 트레이싱은 이벤트의 "클래스"와 "이벤트 코드"라는 개념을 갖지 않는다. 이벤트 로깅 방식이 소프트웨어 트레이싱에 적절하지 않은 이유는 다음과 같다.
 소프트웨어 트레이싱은 저수준이기 때문에 많은 종류의 메시지 형식들이 있으며, 이것들은 코드의 한 부분에만 사용될 수 있다. 이벤트 로깅 파라다임은 이런 "한번만 사용되는" 메시지들로 인한 개발 오버헤드가 발생케 한다.
 개발 기간 동안 기록된 메시지들의 종류는 종종 이벤트 로깅보다 불안정한 편이다.
 트레이싱의 결과는 개발자들이 사용하는 것이기 때문에 메시지는 지역화될 필요가 없다. 그러므로 트레이싱 메시지를 다른 지역화가 필요한 자원들과 분리하는 것은 중요하다.
 한번도 보지 못한 메시지들도 있다.
 트레이싱 메시지들은 코드 안에 있어야 한다. 왜냐하면 이것들은 코드의 신뢰도를 높일 수 있기 때문이다. 이것은 이벤트 로깅 해결책에서는 가능하지 않을 수 있다.
소프트웨어 트레이싱의 다른 중요한 고려할 점은 성능이다. 소프트웨어 트레이싱이 낮은 수준에서 이루어지기 때문에 트레이스 메시지의 가능한 양은 훨씬 커질 수 있다. 그렇기 때문에 종종 컴파일 타임이나 실행 시간에 꺼놓을 필요가 있다. 다른 고려 사항을 보자면

 사유 소프트웨어에서, 트레이싱 데이터는 소스 코드에 대한 민감한 정보를 가질 수 있다.
 만약 트레이싱이 실행 중에 활성화 되거나 비활성화 된다면, 트레이싱의 많은 방식들이 많은 양의 추가적인 데이터를 바이너리에 포함될 것을 필요로 하며, 이것은 성능을 감소시킨다.
 만약 트레이싱이 컴파일 타임에 활성화되거나 비활성화 된다면, 고객 머신의 문제에 대한 트레이스 데이터를 얻는 것은 고객이 특별한 버전의 소프트웨어를 설치할 수 있는가에 달려있으며, 이후에 문제를 복사할 수 있다. 
 운영체제에서, 트레이싱은 부팅 때 같은 상황 같이 이벤트 로깅이 활성화되지 못할 때 유용하다.

기술과 기법 
소프트웨어 트레이싱:
 트레이싱 매크로
 디버거에 출력
 관점 지향 프로그래밍과 related instrumentation 기법
 Windows software trace preprocessor (WPP)
 ftrace를 통한 리눅스 커널 트레이싱
 Kernel Markers와 LTTng을 통한 리눅스 시스템 레벨과 사용자 레벨 트레이싱
이벤트 로깅:
 syslog (see article for specific implementations)
 마이크로소프트 윈도우를 위한 Event Logging APIs
 Windows Event Log (윈도우 비스타)
둘 다에서 적절한:
 Apache logging
 Event Tracing for Windows
 .Net Tracing API
 Java logging APIs
 Visual Basic logging (for Visual Basic .NET)
 Logcheck: a free and open-source utility to manage logs
 X-Trace  (research project)
 Instruction set simulation
 C++ Logging (for cross platform C++ applications)

같이 보기 
 분기 추적

외부 링크 
 The Tracing Book
 Trace Recording for Embedded Systems: Lessons Learned from Five Industrial Projects

디버깅