アプリケーションレベル、ページレベルで設定可能なトレース機能
プログラムが意図したように動作していない、と思ったとき少しデバッグトレースを出力して動作確認するだけで、自分が勘違いしていたところなどに気づき、誤りを修正できることも少なくありません。
また、プログラムの動作が遅い場合にどこでどのくらい時間がかかっているか、ということを知りたい場合がありますが、こういうのは通常プロファイラといわれるツールを使ってチェックすることになります。 が、 ASP.NET ではトレースという機能を ON にするだけでプログラムからトレースログを出力したり、内部動作としてどこに時間がかかっているかなど一目でわかるログを出力することができます。
ここではそうした ASP.NET のトレース機能について簡単にみていきましょう。
ページレベルトレース
特定の ASP.NET ページ (ウェブフォームなど) のトレースを出力する場合は、 Page ディレクティブで Trace="true" とします。
<%@Page Language="C#" Trace="true" CodeFile="Trace1.aspx.cs" Inherits="Trace1" %>
<!doctype html>
<html>
<body>
<form id="form1" runat="server">
<div>Hello, ASP.NET!</div>
</form>
</body>
</html>
これによって、通常のページ出力の下側に詳細なログが出力されます。
Traceを設定しない場合に次のようなページがあったとすると・・・
次のようになります。
下側に出力されているデータが ASP.NET のトレースログです。
このログはプロファイラとしてのログとして、主にパフォーマンスの解析に有効でしょう。
Trace.Write によるトレースメッセージの書き出し
ただ、実際のところ普通にアプリケーションを作っていて、ASP.NET のシステム側の問題で何か不具合とか予期せぬ状態になるということはまれで、 大抵は自分のコードの誤りを直したりするのが主な作業になりますよね。
自分のコードからこのトレースにデータを書き足すことも可能です。
それには、 Trace.Write などを利用します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Trace1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Trace.Write("Entering Page_Load!");
}
}
このように Trace.Write を書くと・・・
このようにログの中にそのトレースが出力されます。
アプリケーションレベルトレース
特定のページではなく、アプリケーションレベルでトレースを有効にする場合は Web.config にて trace を有効にします。
<?xml version="1.0"?>
<configuration>
<system.web>
<trace enabled="true"/>
</system.web>
</configuration>
trace 要素の enabled が true に設定されています。これでアプリケーションレベルのトレースが有効になります。
このログをみるためには、 trace.axd を要求します。
すると次のようにログが確認できます。
ちなみに、trace にはその他にも設定項目がいくつかありますが、その中で localOnly という属性があります。これが true に設定してあると、 ローカルでの要求にたいしてのみトレースログを出力します。
デフォルトでは true になっているはずですが、うっかり本番環境でトレースを有効にしてしまい、外部に不要なデータを漏らさないように気をつけましょう。