.Net Core的日志系统

日志类型:调试日志、追踪日志、诊断日志、事件日志

调试日志: 运用 调试器 Debugger 静态类里面的一些方法输出
在Debug 下编译才生效,Relase下编译后不起作用。

public static void Run()
        {
            Debugger.Log(0, null, "只是一个日志");
            Console.Read();
        }

.Net Core的日志系统_第1张图片

追踪日志: 观察者模式/发布订阅模式

public static void Run()
        {
            var Source = new TraceSource("Trace", SourceLevels.Information);
            Source.TraceEvent(TraceEventType.Error, 1, "这是一条错误信息");
            Console.Read();
        }

创建跟踪源 TraceSource 发布者 SourceLevels 过滤的等级
TraceEvent 发布事件 TraceEventType 过滤的事件等级
以上代码是 创建了一个 过滤info以上的日志追踪源,并且发布了一个 Error等级的事件

默认情况下 订阅监听器 是IDE 输出窗口订阅
.Net Core的日志系统_第2张图片

订阅监听者 TraceListener
可以自己指定 比如说 将日志 在控制台命令输出,或者把日志输出到文件里面去

public static void Run()
        {
           using var fileStream = File.OpenWrite("log.txt");
            var Source = new TraceSource("Trace", SourceLevels.Information);
            Source.Listeners.Add(new ConsoleTraceListener());//文本形式控制台输出
            Source.Listeners.Add(new TextWriterTraceListener(fileStream)); //文件流
            Source.TraceEvent(TraceEventType.Error, 1, "这是一条错误信息");
            Source.Flush(); //文件流 缓冲区输出
            Console.Read();
        }

这样的话 就是 默认IDE输出窗口,以及控制台输出,log.txt文件里面都会写入日志
.Net Core的日志系统_第3张图片
.Net Core的日志系统_第4张图片
订阅监听把内容输出到CSV文件

 public static void Run2()
            {
                const string filename = "log1.csv";
                File.AppendAllText(filename, $"SourceName,EventType,EventId,Message,N/A,ProcessId,N/A,ThreadId,DateTime,{Environment.NewLine}");

                using var fileStream = new FileStream(filename, FileMode.Append);

                var listener = new DelimitedListTraceListener(fileStream)
                {
                    Delimiter = ",",
                    TraceOutputOptions = TraceOptions.DateTime | TraceOptions.ProcessId | TraceOptions.ThreadId
                    //TraceOptions 有的一些属性值  输出的基本上模板也就是这些信息
                };

                var source = new TraceSource("CsvTrace", SourceLevels.All);
                source.Listeners.Add(new ConsoleTraceListener());
                source.Listeners.Add(listener);

                source.TraceEvent(TraceEventType.Information, 1, $"这是一条{TraceEventType.Information}消息");
                source.Flush();


            }

类似于log.txt 只不过有了一些样式分割 以csv的形式处理了一下

日志级别:
ASP.NET Core中提供了6种日志级别,按严重性从低到高排列,分别是
Trace = 0、Debug = 1、Information = 2、Warning = 3、Error = 4、Critical = 5 。
低于设置级别的日志不会输出。
.Net Core的日志系统_第5张图片

诊断日志:
角色:发布者小弟 DiagnosticListener 发布者大哥 Observer
建立发布者与订阅者 适配关系SubscribeWithAdapter
订阅声明:DiagnosticName

  public static class Test2
    {
        //诊断日志
        public static void Run()
        {

            //声明发布者小弟AppLog
            var source = new DiagnosticListener("AppLog");
            //声明发布者小弟AppLog2
            var source2 = new DiagnosticListener("AppLog2");

            //发布者小弟AppLog要发布干的事情   给key是Hello 的消息 传参数
            source.Write("Hello", new
            {
                Type = 1,
                Msg = "2020年5月11日"
            });
            //发布者小弟AppLog2要发布干的事情  给key是Hello2 的消息 传参数
            source2.Write("Hello2", new
            {
                Type = 2,
                Msg = "2020年5月11日"
            });


            //发布管理   DiagnosticListener  发布者小弟    Observer 发布者大哥
            DiagnosticListener.AllListeners.Subscribe(new Observer<DiagnosticListener>(listener =>
            {
                //发布者大哥进行 适配管理
                if (listener.Name == "AppLog")
                {
                    //将发布者小弟AppLog与订阅者的适配关系
                    listener.SubscribeWithAdapter(new CustomSourceCollector());
                }

                //发布者大哥进行 适配管理
                if (listener.Name == "AppLog2")
                {
                    //将发布者小弟AppLog2与订阅者的适配关系
                    listener.SubscribeWithAdapter(new CustomSourceCollector());
                }
            }));

           

        }

        //发布者大哥 真正的发布管理者
        public class Observer<T> : IObserver<T>
        {
            private readonly Action<T> _onNext;

            public Observer(Action<T> onNext)
            {
                _onNext = onNext;
            }

            public void OnCompleted() { }

            public void OnError(Exception error) { }

            public void OnNext(T value)
            {
                _onNext(value);
            }
        }


        //订阅者
        public class CustomSourceCollector
        {
            //订阅的哪个key  Hello 接收Hello的参数
            [DiagnosticName("Hello")]
            public void OnHello(int type, string msg)
            {
                Console.WriteLine($"Type:{type}");
                Console.WriteLine($"Msg:{msg}");
            }

            //订阅的哪个key   Hello2 接收Hello2的参数
            [DiagnosticName("Hello2")]
            public void OnHello2(int type, string msg)
            {
                Console.WriteLine($"Type:{type}");
                Console.WriteLine($"Msg:{msg}");
            }
        }

    }

Asp.Net Core中:

日志配置:
Asp.Net Core 由于Program.cs中默认使用WebHost.CreateDefaultBuilder方法添加了2个日志提供器。已经配置了

使用得话也的相对简单,依赖注入ILogger

第三方日志:

Nlog的使用方法

你可能感兴趣的:(.net,core)