다음을 통해 공유


ASP.NET 추적 개요

업데이트: 2007년 11월

ASP.NET 추적을 사용하면 ASP.NET 페이지의 단일 요청에 대한 진단 정보를 볼 수 있습니다. ASP.NET 추적을 사용하면 페이지의 실행 경로를 따라 런타임에 진단 정보를 표시하고 응용 프로그램을 디버깅할 수 있습니다. ASP.NET 추적은 시스템 수준 추적과 통합되어 다중 계층 분산 응용 프로그램에서 다양한 수준의 추적 출력을 제공할 수 있습니다.

이 항목의 내용은 다음과 같습니다.

  • 기능

  • 배경

  • 코드 예제

  • 클래스 참조

기능

ASP.NET 추적은 다음과 같은 기능을 제공합니다.

  • Debugging statments    코드에 디버그 문을 작성할 수 있으며 응용 프로그램을 프로덕션 서버로 배포할 때 해당 디버그 문을 제거할 필요가 없습니다. 페이지에 변수 또는 구조를 작성하고, 페이지 또는 응용 프로그램의 실행 경로를 추적할 수도 있습니다.

  • Integrated tracing functionality   System.Diagnostics.Trace 클래스에서 생성된 메시지를 ASP.NET 추적 출력으로 라우팅하고 ASP.NET 추적에서 생성된 메시지를 System.Diagnostics.Trace로 라우팅할 수 있습니다. 또한 ASP.NET 계측 이벤트를 System.Diagnostics.Trace에 전달할 수 있습니다. 자세한 내용은 연습: ASP.NET 추적을 System.Diagnostics 추적과 통합을 참조하십시오.

  • Programmatic access to trace messages   추적 메시지의 형식을 좀 더 세밀하게 제어하고 필요에 따라 추가 처리 작업을 수행할 수 있도록 코드를 통해 추적 메시지에 액세스하고 메시지를 조작할 수 있습니다.

  • Application-level tracing   응용 프로그램 수준 추적 옵션을 사용하면 추적 세션을 다시 시작하지 않고도 그리고 서버에 저장되는 추적 데이터의 양을 늘리지 않고도 가장 최근의 추적 데이터를 볼 수 있습니다. 가장 최근의 추적 데이터가 표시되고 오래된 추적 데이터는 삭제됩니다.

맨 위로 이동

배경

추적은 진단 정보와 사용자 지정 추적 메시지를 페이지 출력에 추가하고 이 정보를 요청 브라우저에 전달합니다. 또는 ASP.NET 웹 응용 프로그램의 모든 페이지에 대한 추적 정보를 표시하는 별도의 추적 뷰어(Trace.axd)에서 이 정보를 볼 수 있습니다. 추적 정보는 ASP.NET에서 페이지 요청을 처리할 때 발생하는 오류 또는 원하지 않는 결과를 명확하게 조사하는 데 도움이 됩니다.

추적 정보를 표시하도록 개별 페이지를 구성할 수 있습니다. 또는 페이지에서 추적 기능을 명시적으로 해제한 경우가 아니면 모든 페이지에 추적 정보가 표시되도록 응용 프로그램의 Web.config 파일을 구성할 수도 있습니다. 응용 프로그램 수준 추적을 설정하면 추적 기능을 설정/해제하기 위해 개별 페이지를 변경할 필요가 없으므로 유용합니다.

추적 문은 추적이 설정된 경우에만 처리되고 표시됩니다. 추적이 페이지 또는 추적 뷰어에 표시되는지 아니면 둘 다에 표시되는지를 제어할 수 있습니다. 페이지에 추적을 설정하는 방법에 대한 자세한 내용은 방법: ASP.NET 페이지에 대한 추적 활성화를 참조하십시오. 응용 프로그램에 추적을 설정하는 방법에 대한 자세한 내용은 방법: ASP.NET 응용 프로그램에 대한 추적 활성화를 참조하십시오.

응용 프로그램 수준 ASP.NET 추적

Web.config 파일에서 trace 요소를 사용하여 응용 프로그램 수준 추적을 설정합니다. 응용 프로그램 수준 추적을 설정하면 ASP.NET에서는 사용자가 지정한 최대 요청 수가 될 때까지 응용 프로그램의 각 요청에 대한 추적 정보를 수집합니다. 기본 요청 수는 10입니다. 기본적으로 추적 뷰어가 이 요청 제한에 도달하면 응용 프로그램에서는 더 이상 추적 요청을 저장하지 않습니다. 가장 오래된 추적 데이터를 저장하여 새 항목을 삭제하거나 가장 최근의 추적 정보를 저장하여 오래된 항목을 삭제하도록 추적을 구성할 수 있습니다.

참고:

Web.config 파일에서 전체 응용 프로그램에 대해 추적을 설정하면 해당 응용 프로그램의 각 페이지에 대해 추적 정보가 수집 및 처리됩니다. 응용 프로그램 차원의 설정을 재정의하려면 해당 페이지의 @ Page 지시문에서 Trace 특성을 false로 설정합니다. 페이지의 코드에 포함된 Write 또는 Warn 문은 추적 뷰어에만 저장되고 반환됩니다.

추적 정보 보기

개별 페이지의 아래쪽에서 추적 정보를 볼 수 있습니다. 또는 추적 기능이 설정되어 있는 경우 ASP.NET에서 수집하고 캐시한 추적 정보를 보기 위해 추적 뷰어(Trace.axd)를 사용할 수도 있습니다. 추적 표시에 포함되는 내용에 대한 자세한 내용은 이 항목의 뒷부분에 있는 ASP.NET 추적 정보 읽기를 참조하십시오.

연결된 페이지의 맨 끝에 추적 정보를 나타내려면 trace 요소의 PageOutput 특성을 true로 설정하면 됩니다. 응용 프로그램 수준 추적을 설정했지만 일부 페이지에는 추적 정보를 표시하지 않으려면 해당 페이지의 @ Page 지시문에서 Trace 특성을 false로 설정합니다. ASP.NET 응용 프로그램을 구성하는 방법에 대한 자세한 내용은 ASP.NET 구성 개요를 참조하십시오.

기본적으로 응용 프로그램 수준의 추적은 로컬 웹 서버 컴퓨터에서만 볼 수 있습니다. 원격 컴퓨터에서 응용 프로그램 수준 추적 정보를 보려면 trace 요소의 LocalOnly 특성을 false로 설정해야 합니다.

참고:

웹 응용 프로그램의 보안을 유지하려면 응용 프로그램을 개발하거나 배포하는 경우에만 원격 추적 기능을 사용하십시오. 응용 프로그램을 프로덕션 웹 서버로 전송하기 전에 해제해야 합니다. 이를 수행하려면 Web.config 파일에서 LocalOnly 특성을 true로 설정하십시오.

다음 예제에서는 최대 40개의 요청에 대한 추적 정보를 수집하는 응용 프로그램 추적 구성을 보여 줍니다. 또한 서버 이외의 컴퓨터에 있는 브라우저에서 추적 뷰어를 표시할 수 있도록 합니다.

<configuration>
  <system.web>
    <trace enabled="true" requestLimit="40" localOnly="false" />
  </system.web>
</configuration>

사용자 지정 ASP.NET 추적 메시지 작성

ASP.NET 페이지의 추적 표시 또는 추적 로그에 사용자 지정 추적 정보를 추가할 수 있습니다. 추적 로그에 작성된 추적 정보는 추적 뷰어를 사용하여 볼 수 있습니다. 자세한 내용은 방법: 추적 뷰어로 ASP.NET 추적 정보 보기를 참조하십시오.

TraceContext 클래스의 Warn 또는 Write 메서드를 사용하여 추적 정보를 작성할 수 있습니다. Warn 메서드를 사용하여 작성된 메시지는 빨간색 텍스트로 표시된다는 점이 두 메서드 간의 차이입니다.

다음 예제에서는 TraceContext 클래스를 사용하여 ASP.NET 페이지의 맨 끝에 추적 정보를 표시하는 방법을 보여 줍니다. 다시 게시를 발생시킨 각 LinkButton 컨트롤에 대해 서로 다른 예외가 throw됩니다. ArgumentException 또는 InvalidOperationException 인스턴스를 초기화하는 데 사용되는 오류 메시지가 추적 로그에 표시됩니다.

<%@ Page Language="VB" Trace="true" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script >

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)

    Try
      If (IsPostBack) Then

        Select Case Request.Form("__EVENTTARGET")
          Case "WarnLink"
            Throw New ArgumentException("Trace warn.")
          Case "WriteLink"
            Throw New InvalidOperationException("Trace write.")
          Case Else
            Throw New ArgumentException("General exception.")
        End Select  
      End If
    Catch ae As ArgumentException
      Trace.Warn("Exception Handling", "Warning: Page_Load.", ae)
    Catch ioe As InvalidOperationException
      Trace.Write("Exception Handling", "Exception: Page_Load.", ioe)
    End Try
  End Sub
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Trace Example</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:LinkButton id="WriteLink" 
                      
                      text="Generate Trace Write" />
      <asp:LinkButton id="WarnLink"
                      
                      text="Generate Trace Warn" />
    </div>
    </form>
</body>
</html>
<%@ Page Language="C#" Trace="true"  %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<script >
void Page_Load(object sender, EventArgs e)
{
    try {
      if (IsPostBack)
      {

        switch (Request.Form["__EVENTTARGET"])
        {
          case "WarnLink":
            throw new ArgumentException("Trace warn.");
            break;
          case "WriteLink":
            throw new InvalidOperationException("Trace write.");
            break;
          default:
            throw new ArgumentException("General exception.");
            break;          
        }
      }
    }
    catch (ArgumentException ae) {    
        Trace.Warn("Exception Handling", "Warning: Page_Load.", ae);
    }
    catch (InvalidOperationException ioe) {    
        Trace.Write("Exception Handling", "Exception: Page_Load.", ioe);
    }
}

</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head >
    <title>Trace Example</title>
</head>
<body>
    <form id="form1" >
    <div>
      <asp:LinkButton id="WriteLink" 
                      
                      text="Generate Trace Write" />
      <asp:LinkButton id="WarnLink"
                      
                      text="Generate Trace Warn" />
    </div>
    </form>
</body>
</html>

ASP.NET 추적 정보 읽기

ASP.NET 페이지의 끝 또는 추적 뷰어에 추가된 추적 정보를 볼 수 있습니다. 어떤 방법을 선택하든 동일한 정보가 표시됩니다. ASP.NET은 추적 정보를 일련의 표 형태로 구성합니다. 페이지에서 추적 정보를 보는 방법에 대한 자세한 내용은 방법: ASP.NET 페이지에 대한 추적 활성화를 참조하십시오. 추적 뷰어에서 추적 정보를 보는 방법에 대한 자세한 내용은 방법: 추적 뷰어로 ASP.NET 추적 정보 보기를 참조하십시오.

추적 정보는 다음과 같은 순서로 나타납니다.

요청 정보

요청 정보 섹션에는 현재 요청 및 응답에 대한 일반적인 정보가 표시됩니다.

설명

세션 ID

지정된 요청의 세션 ID입니다.

요청 시간

요청이 수행된 시간입니다.

요청 인코딩

요청의 문자 인코딩입니다.

요청 형식

HTTP 메서드입니다(GET 또는 POST).

상태 코드

응답과 관련된 상태 코드 값입니다. 자세한 내용은 W3C(World Wide Web Consortium) 웹 사이트에서 RFC 2616을 참조하십시오.

응답 인코딩

응답의 문자 인코딩입니다.

추적 정보

추적 정보 섹션에는 페이지 수준 이벤트의 흐름이 표시됩니다. 사용자 지정 추적 메시지를 만든 경우에는 추적 정보 섹션에 이 메시지가 표시됩니다.

설명

범주

Warn 또는 Write 메서드 호출에 지정된 사용자 지정 추적 범주입니다(있는 경우).

메시지

Warn 또는 Write 메서드에 지정된 사용자 지정 추적 메시지입니다(있는 경우).

From First(s)

첫 번째 추적 메시지가 처리된 이후 경과된 시간(초)입니다. 첫 번째 추적 메시지는 목록의 맨 위에 나타납니다.

From Last(s)

현재 추적 메시지 처리와 이전 추적 메시지 처리 간의 경과된 시간(초)입니다.

컨트롤 트리

컨트롤 트리 섹션에는 페이지에서 만든 ASP.NET 서버 컨트롤에 대한 정보가 표시됩니다.

설명

컨트롤 ID

컨트롤의 ID입니다. 컨트롤에 ID 속성을 지정하지 않은 경우 ASP.NET에서는 UniqueID 속성을 사용하여 ID를 생성합니다.

형식

컨트롤의 정규화된 형식입니다.

렌더링 크기 바이트

자식 컨트롤을 포함한 렌더링된 컨트롤의 크기(바이트)입니다. 이 값은 실제 HTML, XML 또는 브라우저에 보낸 다른 형식의 크기입니다.

ViewState 크기 바이트

자식 컨트롤을 제외한 컨트롤의 뷰 상태 크기(바이트)입니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

ControlState 크기 바이트

자식 컨트롤을 제외한 컨트롤의 컨트롤 상태 크기(바이트)입니다. 자세한 내용은 ASP.NET 상태 관리 개요를 참조하십시오.

세션 상태

세션 상태 섹션에는 세션 상태에 저장된 값에 대한 정보가 표시됩니다(있는 경우). 자세한 내용은 ASP.NET 세션 상태 개요를 참조하십시오.

설명

세션 키

세션 상태에 저장된 데이터의 키입니다(있는 경우).

형식

데이터를 저장하는 개체의 정규화된 형식입니다.

세션 상태에 저장된 데이터의 문자열 표현입니다(있는 경우).

응용 프로그램 상태

응용 프로그램 상태 섹션에는 응용 프로그램 상태에 저장된 값에 대한 정보가 표시됩니다(있는 경우). 자세한 내용은 ASP.NET 응용 프로그램 상태 개요를 참조하십시오.

설명

응용 프로그램 키

응용 프로그램 상태에 저장된 데이터의 키입니다(있는 경우).

형식

데이터를 저장하는 개체의 정규화된 형식입니다.

응용 프로그램 상태에 저장된 데이터의 문자열 표현입니다(있는 경우).

쿠키 컬렉션

요청 쿠키 및 응답 쿠키 섹션에는 각 요청과 응답에 대해 브라우저와 서버 간에 전달되는 쿠키에 대한 정보가 표시됩니다. 이 섹션에는 영구 쿠키와 세션 쿠키가 모두 표시됩니다. ASP.NET에서는 쿠키를 기반으로 하는 세션 상태 및 폼 인증에 대한 쿠키 등 일부 쿠키를 자동으로 만듭니다. 자세한 내용은 ASP.NET 쿠키 개요를 참조하십시오.

설명

이름

쿠키의 이름입니다.

쿠키의 값이며, 다중값 쿠키인 경우에는 하위 키와 값입니다.

크기

쿠키의 크기(바이트)입니다.

헤더 컬렉션

헤더 컬렉션 섹션에는 메시지 본문이나 요청한 리소스에 대한 정보를 제공하는 요청 및 응답 메시지 헤더 이름/값 쌍에 대한 정보가 표시됩니다. 헤더 정보는 요청 메시지를 처리하고 응답 메시지를 만드는 방법을 제어하는 데 사용됩니다. HTTP 헤더에 대한 자세한 내용은 W3C(World Wide Web Consortium) 웹 사이트에서 RFC 2616을 참조하십시오.

설명

이름

헤더의 이름입니다.

헤더의 값입니다.

Form 컬렉션

Form 컬렉션 섹션에는 POST 작업(포스트백) 중 요청에 제출된 Form 요소 값(컨트롤 값)을 보여 주는 이름/값 쌍이 표시됩니다.

설명

이름

폼 변수의 이름입니다.

폼 변수의 값입니다.

Querystring 컬렉션

Querystring 컬렉션 섹션에는 URL에 전달된 값이 표시됩니다. URL에서는 물음표(?)를 사용하여 쿼리 문자열 정보가 경로 정보와 구분되고 앰퍼샌드(&)를 사용하여 여러 개의 쿼리 문자열 요소가 각각 구분됩니다. 쿼리 문자열 이름/값 쌍은 등호(=)로 구분됩니다. HttpRequest 개체의 QueryString 속성은 쿼리 문자열 변수의 NameValueCollection을 반환합니다.

설명

이름

쿼리 문자열 변수의 이름입니다.

쿼리 문자열 변수의 값입니다.

서버 변수

서버 변수 섹션에는 서버 관련 환경 변수의 컬렉션과 요청 헤더 정보가 표시됩니다. HttpRequest 개체의 ServerVariables 속성은 서버 변수의 NameValueCollection을 반환합니다.

설명

이름

서버 변수의 이름입니다.

서버 변수의 값입니다.

맨 위로 이동

ASP.NET 추적 및 진단 추적

ASP.NET 추적은 ASP.NET 웹 페이지 및 ASP.NET 추적 뷰어(Trace.axd)에 표시되는 메시지를 작성합니다. 이와 달리 System.Diagnostics.Trace 클래스는 표준 .NET Framework 추적 출력(대개 콘솔 창)에 추적 메시지를 작성하는 데 사용됩니다. ASP.NET 추적 출력을 System.Diagnostics 추적과 통합하면 ASP.NET 웹 페이지가 비즈니스 개체 및 다른 구성 요소와 상호 작용하는 방식을 좀 더 쉽게 추적할 수 있습니다. 그런 다음 모든 추적 메시지를 이러한 출력 중 하나로 라우팅할 수 있습니다.

ASP.NET 추적과 System.Diagnostics.Trace를 모두 사용하는 일반적인 시나리오에는 중간 계층 비즈니스 개체를 사용하여 데이터 및 비즈니스 규칙과 상호 작용하는 웹 페이지가 포함됩니다. 엔터프라이즈 서비스(예: 트랜잭션, 큐)를 사용하는 페이지에 대해 System.Diagnostics.Trace 추적을 사용할 수도 있습니다. 이러한 경우 비즈니스 및 엔터프라이즈 구성 요소는 페이지를 실행하는 데 중요한 역할을 합니다. 또한 단일 추적 출력을 사용함으로써 응용 프로그램 분석은 여러 계층에 걸친 실행 흐름을 모니터링하는 데 도움을 줄 수 있습니다. 자세한 내용은 방법: ASP.NET 응용 프로그램에 대한 추적 활성화를 참조하십시오.

추적 구성 특성

다음 표에서는 Web.config 파일의 trace 요소에서 응용 프로그램 수준 추적의 동작을 수정하는 데 사용할 수 있는 특성을 보여 줍니다.

특성

설명

Enabled

응용 프로그램에 추적 기능을 설정하려면 true이고, 그렇지 않으면 false입니다. 기본값은 false입니다. 페이지의 @ Page 지시문에서 Trace 특성을 true 또는 false로 설정하여 개별 페이지에 대해 이 설정을 재정의할 수 있습니다.

PageOutput

추적 정보를 페이지와 추적 뷰어(Trace.axd)에 모두 표시하려면 true이고, 그렇지 않으면 false입니다. 기본값은 false입니다.

참고:
추적이 설정된 개별 페이지는 이 설정의 영향을 받지 않습니다.

RequestLimit

서버에 저장할 추적 요청의 수입니다. 기본값은 10입니다.

TraceMode

추적 정보가 표시되는 순서입니다. 정보가 처리되는 순서대로 정렬하려면 SortByTime으로 설정하고 사용자 정의 범주에 따라 사전순으로 정렬하려면 SortByCategory로 설정합니다. 기본값은 SortByTime입니다.

LocalOnly

추적 뷰어(Trace.axd)를 호스트 웹 서버에서만 사용할 수 있게 하려면 true이고, 그렇지 않으면 false입니다. 기본값은 true입니다.

MostRecent

가장 최근의 추적 정보를 추적 출력으로 표시하려면 true, 그렇지 않을 경우에는 false입니다. 이 값이 false이면 requestLimit 값이 초과될 때 새 요청이 저장되지 않습니다. 기본값은 false입니다.

참고:
requestLimit 특성에 정의된 제한 값을 초과하는 추적 데이터는 mostRecent 특성이 true인 경우에만 가장 최근 데이터가 우선적으로 표시되도록 삭제됩니다.

코드 예제

방법 및 연습 항목

방법: ASP.NET 페이지에 대한 추적 활성화

방법: ASP.NET 응용 프로그램에 대한 추적 활성화

방법: 추적 뷰어로 ASP.NET 추적 정보 보기

연습: ASP.NET 추적을 System.Diagnostics 추적과 통합

맨 위로 이동

클래스 참조

클래스

설명

System.Diagnostics.Trace

추적을 구현하기 위한 주 클래스입니다.

TraceContext

웹 요청에 대한 실행 정보를 캡처하고 나타냅니다.

맨 위로 이동

참고 항목

개념

성능, 문제 해결 및 디버깅

참조

맨 위로 이동