.Net Core的日志系统
日志类型:调试日志、追踪日志、诊断日志、事件日志
调试日志: 运用 调试器 Debugger 静态类里面的一些方法输出
在Debug 下编译才生效,Relase下编译后不起作用。
public static void Run() { Debugger.Log(0, null, "只是一个日志"); Console.Read(); }
追踪日志: 观察者模式/发布订阅模式
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 输出窗口订阅
订阅监听者 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文件里面都会写入日志
订阅监听把内容输出到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 。
低于设置级别的日志不会输出。
诊断日志:
角色:发布者小弟 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的使用方法
————————————————
版权声明:本文为CSDN博主「Marzlam」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Marzlam/article/details/119240927
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)