我有一个输出跟踪信息的库程序集,以及一个通过 app.config 添加跟踪侦听器的客户端 winforms 应用程序。如果我要在 ASP.NET 中使用该库,而不是为 System.Diagnostics 跟踪配置,我如何“捕获”跟踪输出?
额外的问题:我可以用Elmah做点什么来捕捉和记录这些信息吗?我们的 ASP.NET 应用程序当前使用 Elmah 进行错误记录,但这就是我所知道的一切。
我有一个输出跟踪信息的库程序集,以及一个通过 app.config 添加跟踪侦听器的客户端 winforms 应用程序。如果我要在 ASP.NET 中使用该库,而不是为 System.Diagnostics 跟踪配置,我如何“捕获”跟踪输出?
额外的问题:我可以用Elmah做点什么来捕捉和记录这些信息吗?我们的 ASP.NET 应用程序当前使用 Elmah 进行错误记录,但这就是我所知道的一切。
我认为,只要库输出跟踪信息,无论 ASP.NET 配置如何,都可以使用任何专用工具(如DebugView)甚至是自制工具来捕获此信息。
我看到这是旧的并且已经回答了,但是..我刚刚遇到了同样的问题,我想出了
跟踪侦听器的异常类
namespace TrueNorth.Elmah.TraceListener
{
internal class TraceInformation : Exception
{
internal TraceInformation(string message) : base(message){}
}
internal class TraceError: Exception
{
internal TraceError(string message) : base(message) { }
}
internal class TraceWarning : Exception
{
internal TraceWarning(string message) : base(message) { }
}
internal class TraceWrite : Exception
{
internal TraceWrite(string message) : base(message) { }
}
}
听者
namespace TrueNorth.Elmah.TraceListener
{
internal class ElmahListener : System.Diagnostics.TraceListener
{
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args)
{
TraceEvent(eventCache, source, eventType, id, string.Format(format, args));
}
public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message) //
{
Exception exception;
switch (eventType)
{
case TraceEventType.Information:
exception = new TraceInformation(message);
break;
case TraceEventType.Error:
exception = new TraceError(message);
break;
case TraceEventType.Warning:
exception = new TraceWarning(message);
break;
default:
exception = new TraceWrite(message);
break;
}
if (HttpContext.Current.Session == null)
{
ErrorLog.GetDefault(null).Log(new Error(exception));
}
else
{
ErrorSignal.FromCurrentContext().Raise(exception );
}
}
public override void TraceTransfer(TraceEventCache eventCache, string source, int id, string message, Guid relatedActivityId)
{
base.TraceTransfer(eventCache, source, id, message, relatedActivityId);
}
public override void Write(string message)
{
}
public override void WriteLine(string message)
{
}
}
}
而且,GO 代码(你可以使用你的 web.config)
Tracer.Register();
博客在http://truenorthit.co.uk/2015/04/17/trace-listener-for-elmah-asp-mvc-exception-logger/
编写代码以编程方式附加跟踪文件侦听器并在 web.config 中启用跟踪 - 之后您将完成