/// <summary> /// 格式化追踪到的消息 /// </summary> /// <param name="outputTarget">输出目标</param> /// <param name="traceMessage">追踪的消息</param> /// <returns></returns> protected virtual string FormatTraceMessage(OutputTarget outputTarget, TraceMessage traceMessage) { if (outputTarget == OutputTarget.LoggerFactory) { return(traceMessage.ToExcludeException().ToString()); } else { return(traceMessage.ToIndentedString(spaceCount: 4)); } }
/// <summary> /// 准备请求之前 /// </summary> /// <param name="context">上下文</param> /// <returns></returns> public async override Task OnBeginRequestAsync(ApiActionContext context) { var message = new TraceMessage { RequestTime = DateTime.Now, HasRequest = this.TraceRequest }; if (this.TraceRequest == true) { var request = context.RequestMessage; message.RequestHeaders = request.GetHeadersString(); if (request.Content != null) { message.RequestContent = await request.Content.ReadAsStringAsync().ConfigureAwait(false); } } context.Tags.Set(tagKey, message); }
/// <summary> /// 输出追踪到的消息 /// </summary> /// <param name="context">上下文</param> /// <param name="traceMessage">追踪的消息</param> /// <returns></returns> protected abstract Task LogTraceMessageAsync(ApiActionContext context, TraceMessage traceMessage);
/// <summary> /// 写入LoggerFactory /// </summary> /// <param name="context">上下文</param> /// <param name="categoryName">日志容器名称</param> /// <param name="traceMessage">追踪的消息</param> private void WriteLoggerFactory(ApiActionContext context, string categoryName, TraceMessage traceMessage) { var logging = context.HttpApiConfig.LoggerFactory; if (logging == null) { return; } var logger = logging.CreateLogger(categoryName); var message = this.FormatTraceMessage(OutputTarget.LoggerFactory, traceMessage); if (traceMessage.Exception == null) { logger.LogInformation(this.EventId, message); } else { logger.LogError(this.EventId, traceMessage.Exception, message); } }