/// <summary>
/// 需要捕获请求响应日志的接口加上
/// 可直接用在整个Controller
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public class ApiActionLogAttribute : ActionFilterAttribute
{
private static Stopwatch stopwatch = new Stopwatch();
private string requestDataStr = "";
public override void OnActionExecuting(HttpActionContext actionContext)
{
stopwatch.Restart();
base.OnActionExecuting(actionContext);
//获取请求数据
var stream = actionContext.Request.Content.ReadAsStreamAsync().Result;
requestDataStr = "";
if (stream != null && stream.Length > 0)
{
stream.Position = 0; //当你读取完之后必须把stream的读取位置设为开始
using (var reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
requestDataStr = reader.ReadToEnd();
}
}
Logger.Value.LogTrace($"RequestTime=>{ DateTime.Now}; RequestUrl=>{actionContext.Request.RequestUri.AbsoluteUri}; Body=>{requestDataStr}");
}
public override void OnActionExecuted(HttpActionExecutedContext actionContext)
{
base.OnActionExecuted(actionContext);
string responseDataStr = actionContext.Response.Content.ReadAsStringAsync().Result;
stopwatch.Stop(); // 停止监视
Logger.Value.LogTrace($"ResponseTime=>{ DateTime.Now}; ResponseUrl=>{actionContext.Request.RequestUri.AbsoluteUri}; RequestBody=>{requestDataStr};ResponseBody=>{responseDataStr};耗时=>{stopwatch.ElapsedMilliseconds}");
}
}
/// 需要捕获请求响应日志的接口加上
/// 可直接用在整个Controller
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = false, AllowMultiple = false)]
public class ApiActionLogAttribute : ActionFilterAttribute
{
//延迟加载
//写入日志 的实例
// private static Lazy<ILogger> Logger = new Lazy<ILogger>(() => ComponentAccessor.Instance.LoggerFac.CreateLogger<ApiActionLogAttribute>(), true);private static Stopwatch stopwatch = new Stopwatch();
private string requestDataStr = "";
public override void OnActionExecuting(HttpActionContext actionContext)
{
stopwatch.Restart();
base.OnActionExecuting(actionContext);
//获取请求数据
var stream = actionContext.Request.Content.ReadAsStreamAsync().Result;
requestDataStr = "";
if (stream != null && stream.Length > 0)
{
stream.Position = 0; //当你读取完之后必须把stream的读取位置设为开始
using (var reader = new StreamReader(stream, System.Text.Encoding.UTF8))
{
requestDataStr = reader.ReadToEnd();
}
}
Logger.Value.LogTrace($"RequestTime=>{ DateTime.Now}; RequestUrl=>{actionContext.Request.RequestUri.AbsoluteUri}; Body=>{requestDataStr}");
}
public override void OnActionExecuted(HttpActionExecutedContext actionContext)
{
base.OnActionExecuted(actionContext);
string responseDataStr = actionContext.Response.Content.ReadAsStringAsync().Result;
stopwatch.Stop(); // 停止监视
Logger.Value.LogTrace($"ResponseTime=>{ DateTime.Now}; ResponseUrl=>{actionContext.Request.RequestUri.AbsoluteUri}; RequestBody=>{requestDataStr};ResponseBody=>{responseDataStr};耗时=>{stopwatch.ElapsedMilliseconds}");
}
}