ASP.NET中的跟踪侦听器

时间:2009-06-12 09:32:52

标签: asp.net logging elmah

我有一个输出跟踪信息的库程序集,以及一个通过app.config添加跟踪监听器的客户端winforms应用程序。如果我在ASP.NET中使用该库,未配置System.Diagnostics跟踪,我怎么能“捕获”跟踪输出?

奖金问题:我可以使用Elmah执行某些操作来捕获并记录此信息吗?我们的ASP.NET应用程序目前使用Elmah进行错误记录,但这就是我所知道的所有事情。

3 个答案:

答案 0 :(得分:1)

我认为,只要库输出跟踪信息,就可以使用任何专用工具(如DebugView)甚至是自家发展的工具捕获此信息,无论ASP.NET配置如何。

答案 1 :(得分:1)

我觉得这已经老了并且已经回答了,但是......我刚刚遇到了同样的问题,我想出了

tracelistener的异常类

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/

答案 2 :(得分:0)

编写用于以编程方式附加跟踪文件侦听器并在web.config中启用跟踪的代码 - 之后将完成