image.png

什么是LOGGING

.NET里面的日志分为六个级别
image.png
image.png
具体代码:

  1. using Microsoft.Extensions.DependencyInjection;
  2. using Microsoft.Extensions.Logging;
  3. namespace _210915_Demon01_Logging
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. var service = new ServiceCollection();
  10. service.AddLogging(e=> {
  11. e.AddConsole();
  12. //设置日志最低的输出级别,Critical>Error>Warning>Information>Debug>Trace
  13. e.SetMinimumLevel(LogLevel.Trace);
  14. });
  15. service.AddScoped<EmailLog>();
  16. using (var sp = service.BuildServiceProvider())
  17. {
  18. sp.GetRequiredService<EmailLog>().InitData();
  19. sp.GetRequiredService<EmailLog>().OperateDataError();
  20. }
  21. }
  22. }
  23. }
  24. using Microsoft.Extensions.Logging;
  25. using System;
  26. using System.IO;
  27. namespace _210915_Demon01_Logging
  28. {
  29. class EmailLog
  30. {
  31. //这里面绑定的是什么类,输出的日志就会绑定到什么类上。
  32. private readonly ILogger<EmailLog> logger;
  33. public EmailLog(ILogger<EmailLog> logger)
  34. {
  35. this.logger = logger;
  36. }
  37. public void InitData()
  38. {
  39. logger.LogInformation("Start to execute the database.");
  40. }
  41. public void OperateDataError()
  42. {
  43. logger.LogError("Operate database failed.");
  44. logger.LogTrace("Tracking error.");
  45. logger.LogError("Operate database failed.");
  46. //可以将异常信息写入
  47. try
  48. {
  49. File.ReadAllText("x");
  50. }
  51. catch (Exception ex)
  52. {
  53. logger.LogError(ex, "Exception");
  54. }
  55. }
  56. }
  57. }

image.png
image.png

通过EventLog记录到Windows平台下EventView下

只需要在service.AddLogging(e=>{e.AddEventlog();});即可
image.png
image.png

NLOG-文本日志

日志记录注意事项:

  • 文本日志一般按照日期区分,xxx-Data
  • 限制日志总个数或者总大小,防止将磁盘撑爆炸
  • 限制单个日志文件的大小

image.png
image.png

NLog.Extension.Logging的使用

  • 到Nuget.org下去官方网站查看说明
  • 在项目中新建nlog.config(最好小写,约定大于配置,便于在linux下运行,linux大小写敏感)
  • nlog.config中路径,将C盘删掉默认在程序根目录下保存,设置如果较新则复制。
  • image.png
  • image.png

    参数解读

    image.png
    image.png
    最多只会有四个文件:
    image.png
    image.png
    image.png

    结构化日志和集成日志服务

    结构化日志

    image.png

    集中化日志

    image.png

    Serilog

    image.png
    image.png

    Exceptionless

    image.png
    Exceptionless.com
    image.png
    writeto.exceptionless需要安装Nuget
    image.png ```csharp using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using Serilog; using Serilog.Formatting.Json; using SystemService; using Exceptionless;

namespace _210915_Demon01_Logging { class Program { static void Main(string[] args) { ExceptionlessClient.Default.Startup(“up5uzK6h92iGTN6ZAXNkiVecefPRWFLuwp45Chfd”); var service = new ServiceCollection(); service.AddLogging(e=> { //e.AddConsole();//Console Provider 保存日志到控制台下,这边执行的操作就是ConfigurationBuilder.Addxxx()。 //e.AddEventLog();//EventLog Provider 保存日志到Windows平台下的EventViewer下。 //e.AddNLog();//NLog Provider,保存日志到文件中,日志文件保存路径在配置文件中设置。 //设置日志最低的输出级别,Critical>Error>Warning>Information>Debug>Trace。 //e.SetMinimumLevel(LogLevel.Trace); //Serilog使用 Log.Logger = new LoggerConfiguration().MinimumLevel.Debug() .Enrich.FromLogContext() .WriteTo.Console(new JsonFormatter()) .WriteTo.Exceptionless() .CreateLogger(); e.AddSerilog(); }); service.AddAlbertLog();//扩展方法

  1. using (var sp = service.BuildServiceProvider())
  2. {
  3. sp.GetRequiredService<IAlbertLog>().InitData();
  4. sp.GetRequiredService<IAlbertLog>().OperateDataError();
  5. }
  6. }
  7. }

} ```

总结

最好用Serilog(结构化日志)
image.png