В ASP.NET Web API, как просмотреть подробности TraceRecord на встроенной странице?
Я включил трассировку для своего приложения Web API, создав новый Trace Writter, который просто регистрирует детали в файле:
public class MyTraceWriter : ITraceWriter
{
private readonly ILog _log;
public MyTraceWriter(ILog log)
{
_log = log;
}
public void Trace(HttpRequestMessage request, string category, TraceLevel level, Action<TraceRecord> traceAction)
{
var traceRecord = new TraceRecord(request, category, level);
traceAction(traceRecord);
_log.Info(GetDetails(traceRecord));
}
private string GetDetails(TraceRecord traceRecord)
{
var sb = new StringBuilder();
sb.AppendFormat("\r\n\t{0} {1}\r\n\tCategory={2}, Level={3}, Kind={4}\r\n\tOperator:{5}, Operation: {6}",
traceRecord.Request.Method,
traceRecord.Request.RequestUri,
traceRecord.Category,
traceRecord.Level,
traceRecord.Kind,
traceRecord.Operator,
traceRecord.Operation);
if (traceRecord.Exception != null)
{
sb.AppendFormat("\r\n\tException : {0}", traceRecord.Exception.GetBaseException().Message);
}
else if (traceRecord.Message != null)
{
sb.AppendFormat("\r\n\tMessage : {0}", traceRecord.Message);
}
sb.AppendLine();
return sb.ToString();
}
}
Затем зарегистрируйте мой класс в Global.ascx:
config.Services.Replace(typeof(ITraceWriter),
new MyTraceWriter(LogManager.GetLogger("Tracing")));
Мне просто интересно, есть ли какая-нибудь встроенная функция / инструмент / страница, которую я могу использовать / контролировать для просмотра деталей трассировки?
если возможно, я бы хотел избежать создания моей собственной таблицы базы данных и страницы.
1 ответ
В качестве альтернативы вы можете установить пакет nuget Microsoft.AspNet.WebApi.Tracing и затем вызвать config.EnableSystemDiagnosticsTracing();
в вашем WebApiConfig.cs
, Это расширение регистрирует SystemDiagnosticsTraceWriter
для тебя.
Вы также можете зарегистрировать прослушиватель трассировки EventLog для записи событий в EventLog, и в этом случае вы можете использовать EventViewer для просмотра данных.
Пример:
<configuration>
<system.diagnostics>
<trace autoflush="false" indentsize="4">
<listeners>
<add name="myListener"
type="System.Diagnostics.EventLogTraceListener"
initializeData="TraceListenerLog" />
</listeners>
</trace>
</system.diagnostics>