.NET 跟踪不适用于 Diagnostics.TraceSource,仅适用于 Diagnostics.Trace
我正在尝试设置 .NET 跟踪。我可以通过 System.Diagnostics.Trace 进行基本跟踪,但由于复杂的原因,我必须通过 System.Diagnostics.TraceSource 对象(自 .NET 2.0 以来的新方法)激活跟踪,而不是使用 System .诊断.跟踪。我已经尝试了一切,但它只是不想使用 TraceSource 工作。我正在 ASP.NET 代码隐藏 (aspx.cs) 中执行跟踪
以下是一些相关 URL:
http://msdn.microsoft.com/en-us/library/ty48b824.aspx
http://msdn.microsoft.com/en-us/library/64yxa344.aspx
http://msdn.microsoft.com/en-us/library/sk36c28t.aspx
http://blogs.msdn.com/b/bclteam /archive/2005/03/15/396431.aspx
http://msdn.microsoft.com/en -us/library/b0ectfxd%28v=VS.100%29.aspx
目前,根据 web.config 中的内容,它应该从以下代码跟踪到文件和页面:
TraceSource ts = new TraceSource("mysource", SourceLevels.All);
Trace.Write("Trace (old way)"); // this one works
ts.TraceInformation("Trace (new way)"); // this one doesn't work
ts.Flush();
ts.Close();
这是相关的 web.config 部分:
<system.diagnostics>
<trace autoflush="false">
<listeners> <!-- these listeners activate the "old way" of tracing. -->
<add name="pagelistener" />
<add name="filelistener" />
</listeners>
</trace>
<sources>
<source name="mysource" switchName="myswitch">
<listeners> <!-- these listeners activate the "new way" -->
<add name="pagelistener" />
<add name="filelistener" />
</listeners>
</source>
</sources>
<sharedListeners>
<!-- these are the actual trace listeners -->
<add
name="filelistener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="loplog.txt"
/>
<add
name="pagelistener"
traceOutputOptions="none"
type="System.Web.WebPageTraceListener, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</sharedListeners>
<switches>
<!-- the sources above use this verbose switch -->
<add name="myswitch" value="Verbose"/>
</switches>
</system.diagnostics>
<system.codedom>
<!-- this compilers section should not be needed because I added
#define TRACE to the .aspx.cs file, however I put this in
since it's still not working. -->
<compilers>
<compiler
language="c#;cs;csharp"
extension=".cs"
compilerOptions="/d:TRACE"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="1"
/>
</compilers>
</system.codedom>
<system.web>
<!-- this trace tag should be redundant because I added trace="true" to the aspx file,
but I put it in here anyway because this wasn't working. -->
<trace writeToDiagnosticsTrace="true" enabled="true" pageOutput="true" requestLimit="50" localOnly="true"/>
I’m trying to set up .NET tracing. I’m able to get basic tracing to work via System.Diagnostics.Trace, but for complicated reasons I have to activate tracing via System.Diagnostics.TraceSource objects (the new way of doing it, since .NET 2.0) rather than using System.Diagnostics.Trace. I've tried everything but it just doesn't want to work using TraceSource. I am performing the tracing in an ASP.NET code-behind (aspx.cs)
Here are some related URLs:
http://msdn.microsoft.com/en-us/library/ty48b824.aspx
http://msdn.microsoft.com/en-us/library/64yxa344.aspx
http://msdn.microsoft.com/en-us/library/sk36c28t.aspx
http://blogs.msdn.com/b/bclteam/archive/2005/03/15/396431.aspx
http://msdn.microsoft.com/en-us/library/b0ectfxd%28v=VS.100%29.aspx
Currently, based on what is in web.config, it should be tracing both to a file and to the page, from this code:
TraceSource ts = new TraceSource("mysource", SourceLevels.All);
Trace.Write("Trace (old way)"); // this one works
ts.TraceInformation("Trace (new way)"); // this one doesn't work
ts.Flush();
ts.Close();
Here’s the web.config sections that are relevant:
<system.diagnostics>
<trace autoflush="false">
<listeners> <!-- these listeners activate the "old way" of tracing. -->
<add name="pagelistener" />
<add name="filelistener" />
</listeners>
</trace>
<sources>
<source name="mysource" switchName="myswitch">
<listeners> <!-- these listeners activate the "new way" -->
<add name="pagelistener" />
<add name="filelistener" />
</listeners>
</source>
</sources>
<sharedListeners>
<!-- these are the actual trace listeners -->
<add
name="filelistener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="loplog.txt"
/>
<add
name="pagelistener"
traceOutputOptions="none"
type="System.Web.WebPageTraceListener, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</sharedListeners>
<switches>
<!-- the sources above use this verbose switch -->
<add name="myswitch" value="Verbose"/>
</switches>
</system.diagnostics>
<system.codedom>
<!-- this compilers section should not be needed because I added
#define TRACE to the .aspx.cs file, however I put this in
since it's still not working. -->
<compilers>
<compiler
language="c#;cs;csharp"
extension=".cs"
compilerOptions="/d:TRACE"
type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
warningLevel="1"
/>
</compilers>
</system.codedom>
<system.web>
<!-- this trace tag should be redundant because I added trace="true" to the aspx file,
but I put it in here anyway because this wasn't working. -->
<trace writeToDiagnosticsTrace="true" enabled="true" pageOutput="true" requestLimit="50" localOnly="true"/>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
将
switchName="mySwitch"
更改为switchValue="Verbose"
。然后通过跟踪源输出所有跟踪。您可以更改switchLevel
以增加/减少跟踪的详细程度。在您的示例中,您跟踪了一条信息消息,其中有详细信息、警告、错误、严重。将开关设置为警告,您将不会收到任何详细或信息消息。change
switchName="mySwitch"
toswitchValue="Verbose"
. This then outputs ALL traces via tracesource. You can change theswitchLevel
to increase / reduce the verbosity of the tracing. In your sample you have traced an information message, there is, verbose, information, warnings, error, critical. Set switch to warning and you won't get any verbose or information messages.