ASP.NET Tutorial/Development/Trace
Содержание
- 1 Enable trace in Web.config
- 2 Enabling Page Level Tracing
- 3 Set Page.Trace.IsEnabled to true (C#)
- 4 Trace.IsEnabled
- 5 Trace to a file
- 6 Logging trace output to <asp:Literal runat="server" Text="<%$ appSettings:traceFile %>" />
- 7 Use Trace.Write to write message (C#)
- 8 Write warning message with Trace.Warn
Enable trace in Web.config
<source lang="csharp">
File: web.config <configuration>
<system.web> <trace enabled="true"/> </system.web>
</configuration></source>
Enabling Page Level Tracing
<source lang="csharp">
<%@ Page Language="C#" Trace="true" %> <script runat="server">
private void Page_Load(Object Source, EventArgs E) { Trace.Write("Page_Load", "Declaring and initializing variables."); int _A = 10; int _B = 20; Trace.Write("Page_Load", "Applying add operation."); _A += _B; Trace.Write("Page_Load", "Variable values changed."); Trace.Write("_A", _A.ToString()); Trace.Write("_B", _B.ToString()); }
</script> <html> <head> <title>Enabling Page Level Tracing</title> </head> <body>
<form runat="server"> </form>
</body> </html></source>
Set Page.Trace.IsEnabled to true (C#)
<source lang="csharp">
File: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="SimpleTrace" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> </head> <body>
<form id="form1" runat="server">
A Simple Tracing Example<asp:Button ID="cmdTrace" runat="server" OnClick="cmdTrace_Click" Text="Trace" />
</form>
</body> </html>
File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class SimpleTrace : System.Web.UI.Page {
protected void cmdTrace_Click(object sender, EventArgs e) { Page.Trace.IsEnabled = true; Session["TestString"] = "This is just a string."; Session["MyDataSet"] = new DataSet(); }
}</source>
Trace.IsEnabled
<source lang="csharp">
<%@ Page Language="vb" %> <html>
<head> <title></title> <script runat="server"> Sub Page_Load() If Trace.IsEnabled = True Then Message.Text = "Tracing is enabled." Else Message.Text = "Tracing is not enabled." End If End Sub </script> </head>
<body>
<asp:label id="Message" runat="server"/>
</body> </html></source>
Trace to a file
<source lang="csharp">
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Tracing" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server">
Logging trace output to <asp:Literal runat="server" Text="<%$ appSettings:traceFile %>" />
</form>
</body> </html> File: Default.aspx.cs using System; using System.IO; using System.Web; using System.Configuration; public partial class Tracing : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) { Trace.TraceFinished += Trace_Finished; Trace.Write("Using Page Trace", "Subscribed to TraceFinished event"); } void Trace_Finished(Object sender, TraceContextEventArgs e) { string traceFile = ConfigurationManager.AppSettings["traceFile"]; using (StreamWriter w = File.AppendText(traceFile)) { int i = 0; foreach (TraceContextRecord r in e.TraceRecords) w.WriteLine("{0}) {1}:{2}", ++i, r.Category, r.Message); } }
} File: Web.config <?xml version="1.0"?> <configuration>
<appSettings> <add key="traceFile" value="c:\temp\trace_log.txt"/> </appSettings> <system.web> <compilation debug="true"/> <trace enabled="true" pageOutput="false" localOnly="true" /> </system.web>
</configuration></source>
Use Trace.Write to write message (C#)
<source lang="csharp">
File: Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="TraceExample" Trace="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">
<title>Untitled Page</title>
</head> <body>
<form id="form1" runat="server">
<asp:Button ID="cmdWrite" runat="server" OnClick="cmdWrite_Click" Text="Write" /> <asp:Button ID="cmdWriteCategory" runat="server" OnClick="cmdWriteCategory_Click" Text="Write Category" /> <asp:Button ID="cmdError" runat="server" OnClick="cmdError_Click" Text="Write Error" />
</form>
</body> </html>
File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class TraceExample : System.Web.UI.Page {
protected void cmdError_Click(object sender, EventArgs e) { try { DivideNumbers(5, 0); } catch (Exception err) { Trace.Warn("cmdError_Click", "Caught Error", err); } } protected void cmdWrite_Click(object sender, EventArgs e) { Trace.Write("About to place an item in session state."); Session["Test"] = "Contents"; Trace.Write("Placed item in session state."); } protected void cmdWriteCategory_Click(object sender, EventArgs e) { Trace.Write("Page_Load", "About to place an item in session state."); Session["Test"] = "Contents"; Trace.Write("Page_Load", "Placed item in session state."); } private decimal DivideNumbers(decimal number, decimal divisor) { return number / divisor; }
}</source>
Write warning message with Trace.Warn
<source lang="csharp">
<%@ Page Language="VB" Trace="true"%> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.Data.OleDb" %> <script language="VB" runat="server">
sub Page_Load(Sender as Object, e as EventArgs) Trace.Warn("Custom", "Page loading...") if not Page.IsPostBack then Trace.Warn("Custom", "No post") CreateData() end if end sub sub CreateData dim source as DataView source = Cache("DataView") if source is nothing then dim strConnString as string = "PROVIDER=Microsoft.Jet.OLEDB.4.0;" _ & "DATA SOURCE=" _ & Server.MapPath("EmployeeDatabase.mdb;") Trace.Warn("Custom", "Creating OleDbDataAdapter...") dim objCmd as OleDbDataAdapter = new _ OleDbDataAdapter("select * from employee", _ strConnString) Trace.Warn("Custom", "SQL value: " & _ objCmd.SelectCommand.rumandText) dim ds as DataSet = new DataSet() objCmd.Fill(ds, "employee") source = new DataView(ds.Tables(0)) Trace.Warn("Custom", "Inserting into cache...") Cache.Insert("DataView", source) lblMessage.Text = "Data set created explicitly" else lblMessage.Text = "Data set retrieved from " & _ "cache
" end if Trace.Warn("Custom", "Binding data...") dgData.DataSource = source dgData.DataBind() end sub sub ExpireCache(Sender as Object, e as EventArgs) Trace.Warn("Custom", _ "Removing from cache, call CreateData") dim dv as dataview = Cache.Remove("DataView") CreateData() end sub
</script> <html><body>
<form runat="server"> <asp:Label id="lblMessage" runat="server" maintainState=false/> <asp:Button id="btSubmit" runat="server" text="Expire Cache" OnClick="ExpireCache"/> <asp:DataGrid id="dgData" runat="server" BorderColor="black" GridLines="Vertical" cellpadding="4" cellspacing="0" width="450" Font-Name="Arial" Font-Size="8pt" /> </form>
</body></html> File: web.config <configuration>
<system.web> <trace enabled="true"/> </system.web>
</configuration></source>