在MVC中使用 blqw.Logger(1)

Github源码

这货写了有一段时间了,今天抽空写一个使用的教程,暂且算教程吧。

首先建一个MVC项目,为了简单一个我直接使用WebApi了。

nuget安装blqw.Logger

在MVC中使用 blqw.Logger(1)_第1张图片

安装完之后在Web.Config中会出现以下配置

  
    
      
      
    
    
      
        
      
    
  

改成这样

  
    
      
        
      
    
  

Global.asax中加入如下代码

    public class WebApiApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
        }

        public override void Init()
        {
            BeginRequest += (a, b) => Trace.WriteLine("BeginRequest");
            PreSendRequestContent += (a, b) => Trace.Flush();
            base.Init(); 
        }
    }

主要是init()里面 BeginRequest 事件作为第一个事件,在里面输入第一个日志,用于生成上下文日志id
在最后一个事件 PreSendRequestContent 中调用Trace.Flush()用于输出日志到文件。

ps:关于事件的顺序,可以参考下面这张图,之前我也搞错了,吧Flush写在EndRequest里,造成部分日志丢失

在MVC中使用 blqw.Logger(1)_第2张图片

然后在ApiController的代码

    public class TestController : ApiController
    {
        public string Get(int id)
        {
            Trace.WriteLine("测试一下日志哦:id=" + id, "测试");
            return "value";
        }
    }

直接运行看效果

在MVC中使用 blqw.Logger(1)_第3张图片
访问

找到本地的 look.html文件,打开

在MVC中使用 blqw.Logger(1)_第4张图片
在MVC中使用 blqw.Logger(1)_第5张图片
选择文件
在MVC中使用 blqw.Logger(1)_第6张图片
选择文件
在MVC中使用 blqw.Logger(1)_第7张图片
点击看详情
在MVC中使用 blqw.Logger(1)_第8张图片
详情

这个就是刚才的日志,但是只有两条。
然后我们可以稍微改造一下。

public override void Init()
{
    BeginRequest += (a, b) =>
    {
        var application = (HttpApplication)a;
        application.Context.Items["api_timer"] = Stopwatch.StartNew();
        var req = application.Context.Request;

        Trace.Write(Trace.CorrelationManager.ActivityId, "LogID");
        Trace.Write(req.UserHostAddress, "IP");
        Trace.Write(req.Url.ToString(), "*URL*");
        Trace.Write(req.UserHostName, "UserHostName");
        foreach (var name in req.Headers.AllKeys)
        {
            Trace.Write(req.Headers[name], $"Header:{name}");
        }
    };
    PreSendRequestContent += (a, b) =>
    {
        var application = (HttpApplication)a;
        var timer = application.Context.Items["api_timer"] as Stopwatch;
        if (timer != null)
        {
            timer.Stop();
            Trace.Write($" {timer.Elapsed.TotalMilliseconds} ms", "API请求耗时");
        }
        Trace.Flush();
    };
    base.Init();
}

现在输出的日志就是这样的


在MVC中使用 blqw.Logger(1)_第9张图片

其中*URL*因为前后加了星号,默认为重要信息
所以可以显示在列表中,而不需要展开详情查看

在MVC中使用 blqw.Logger(1)_第10张图片
Paste_Image.png

我觉得api执行时间也很重要

Trace.Write($" {timer.Elapsed.TotalMilliseconds} ms", "*API请求耗时*");
在MVC中使用 blqw.Logger(1)_第11张图片

未完待续...

你可能感兴趣的:(在MVC中使用 blqw.Logger(1))