private TraceLevel ConvertToLogJamTraceLevel(System.Web.Http.Tracing.TraceLevel level) { switch (level) { case System.Web.Http.Tracing.TraceLevel.Off: return(TraceLevel.Off); case System.Web.Http.Tracing.TraceLevel.Debug: return(TraceLevel.Debug); case System.Web.Http.Tracing.TraceLevel.Info: // Info is used promiscuously in Web API - thus we switch it to Verbose. return(TraceLevel.Verbose); case System.Web.Http.Tracing.TraceLevel.Warn: return(TraceLevel.Warn); case System.Web.Http.Tracing.TraceLevel.Error: return(TraceLevel.Error); case System.Web.Http.Tracing.TraceLevel.Fatal: return(TraceLevel.Severe); default: throw new ArgumentException("Value " + level + " is invalid.", "level"); } }
/// <summary> /// Trace the specified values in a new <see cref="System.Web.Http.Tracing.TraceRecord" /> if and only if tracing is /// permitted at the given category and level. /// </summary> /// <param name="request"> /// The current <see cref="System.Net.Http.HttpRequestMessage" />. It may be null but doing so will prevent subsequent /// trace analysis /// from correlating the trace to a particular request. /// </param> /// <param name="category">The logical category for the trace. Users can define their own.</param> /// <param name="level">The <see cref="System.Web.Http.Tracing.TraceLevel" /> at which to write this trace.</param> /// <param name="traceAction"> /// The action to invoke if tracing is enabled. The caller is expected to fill in the fields of the /// given <see cref="System.Web.Http.Tracing.TraceRecord" /> in this action. /// </param> public void Trace(HttpRequestMessage request, string category, System.Web.Http.Tracing.TraceLevel level, Action <System.Web.Http.Tracing.TraceRecord> traceAction) { Tracer tracer = _tracerFactory.GetTracer(category); TraceLevel traceLevel = ConvertToLogJamTraceLevel(level); if (tracer.IsTraceEnabled(traceLevel)) { var sb = new StringBuilder(); if (request != null) { long requestNum = request.GetRequestNumber(); if (requestNum > 0) { sb.Append(requestNum); } else { sb.Append(request.RequestUri.OriginalString); } sb.Append(": "); } var traceRecord = new System.Web.Http.Tracing.TraceRecord(request, category, level); traceAction(traceRecord); sb.AppendFormat("{0} {1} {2} {3}", traceRecord.Kind, traceRecord.Operation, traceRecord.Operator, traceRecord.Message); // Avoid logging the same exception over and over Exception traceException = traceRecord.Exception; if (traceException != null) { if (request != null) { if (request.HasRequestExceptionBeenLogged(traceException)) { sb.AppendLine(); sb.Append(" (exception already logged)"); tracer.Trace(traceLevel, sb.ToString()); } else { request.LoggedRequestException(traceException); tracer.Trace(traceLevel, traceException, sb.ToString()); } } } else { tracer.Trace(traceLevel, sb.ToString()); } } }
public void Log(TraceLevel level, string message, Exception ex) { Debug.WriteLine($"Log: {level.ToString()} - {message} - {ex?.Message}"); }