在MVC中使用 blqw.Logger(3)

Github源码

第一篇介绍如何使用Trace记录日志
在MVC中使用 blqw.Logger(1)
第二篇介绍如何使用TraceSource记录日志
在MVC中使用 blqw.Logger(2)

这篇说的是记录独立业务日志的方法(非全局日志)

回忆一下第一篇的配置

  
    
      
        
      
    
  

现在增加一个配置,这里我配置的是SystemLogTraceListener,这个侦听器会将日志写到windows系统的事件记录器中,侦听器的名字就是事件记录器中的“来源”。

  
    
      
        
          
          
        
      
    
    
      
        
      
    
  

在代码中增加一个TraceSource实例

private static readonly TraceSource _trace = new TraceSource("Business", SourceLevels.All);

写日志

_trace.TraceData(TraceEventType.Verbose, 0, "balabala");

一个比较完整的Demo

    public class TestController : ApiController
    {
        private static readonly TraceSource _trace = new TraceSource("Business", SourceLevels.All);
        public string Get(int id)
        {
            _trace.TraceData(TraceEventType.Verbose, 0, "记录业务日志,收到请求id=" + id);
            Trace.WriteLine("测试一下日志哦:id=" + id, "测试");
            return "value";
        }
    }

测试接口


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

然后到事件记录器中去看日志


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

我还可以建立一个完全自己控制的日志记录器

public class MyTraceListener : TraceListenerBase
{
    public MyTraceListener(string initializeData = null)
        : base(true, initializeData)
    {

    }
    
    protected override WriteQueue CreateQueue() => new WriteQueue(new Wirter(this), 10 * 10000);

    class Wirter : FileWriter
    {
        public Wirter(MyTraceListener listener)
        {
            DirectoryPath = listener.InitializeData;
            Initialize(listener);
        }

        public override void Append(LogItem item)
        {
            if (!item.IsFirst && !item.IsLast)
            {
                ChangeFileIfFull();
                Append($"{item.Time:yyyy-MM-dd HH:mm:ss}\t{item.Level}\t{item.Message}");
                if (item.Content != null)
                {
                    var ee = (item.Content as IEnumerable)?.GetEnumerator() ?? item.Content as IEnumerator;
                    if (ee != null)
                    {
                        while (ee.MoveNext())
                        {
                            Append(ee.ToString());
                        }
                    }
                    else
                    {
                        Append(item.Content.ToString());
                    }
                }
                AppendLine();
            }
        }
    }
}

这依然是一个比较简单的例子,如果要更多功能可以看看 TraceListenerBaseIWriter 的注释,这里就做一个抛砖引玉

改配置

  
    
      
        
          
          
          
        
      
    
    
      
        
      
    
    
      
    
  

如果不知道type应该填什么可以先跑一下这段代码,取前面2节就好

typeof(MyTraceListener).AssemblyQualifiedName
在MVC中使用 blqw.Logger(3)_第3张图片

测试接口 id=999

在MVC中使用 blqw.Logger(3)_第4张图片
在MVC中使用 blqw.Logger(3)_第5张图片
image.png

节点 中的配置不影响 节点

如果想把日志记录到数据库 或者redis,mq之类的地方只需要实现对应的实现即可

未完待续...

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