当前位置:   article > 正文

Microsoft.Extensions.Logging.ILogger实现按类名写入不同的日志文件

microsoft.extensions.logging

使用Microsoft.Extensions.Logging框架可以很方便地实现按类名写入不同的日志文件。你可以通过配置LoggerProvider来实现此功能。下面是一个示例代码,演示如何按类名将日志写入不同的日志文件:

  1. using Microsoft.Extensions.Logging;
  2. using System;
  3. public class ClassNameLoggerProvider : ILoggerProvider
  4. {
  5. private readonly string logFolderPath; // 日志文件夹路径
  6. public ClassNameLoggerProvider(string folderPath)
  7. {
  8. logFolderPath = folderPath;
  9. }
  10. public ILogger CreateLogger(string categoryName)
  11. {
  12. var className = categoryName.Substring(categoryName.LastIndexOf(".") + 1); // 获取类名
  13. var logger = new ClassNameLogger(className, logFolderPath);
  14. return logger;
  15. }
  16. public void Dispose()
  17. {
  18. // 可以在这里释放资源
  19. }
  20. }
  21. public class ClassNameLogger : ILogger
  22. {
  23. private readonly string className;
  24. private readonly string logFolderPath;
  25. public ClassNameLogger(string name, string folderPath)
  26. {
  27. className = name;
  28. logFolderPath = folderPath;
  29. }
  30. public IDisposable BeginScope<TState>(TState state)
  31. {
  32. return null; // 如果需要支持作用域,请返回一个实现了IDisposable接口的对象
  33. }
  34. public bool IsEnabled(LogLevel logLevel)
  35. {
  36. return true; // 指定日志级别,这里设置为所有级别都输出日志
  37. }
  38. public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
  39. {
  40. var message = formatter(state, exception);
  41. // 根据类名创建日志文件名
  42. var logFileName = $"{className}_{DateTime.Now.ToString("yyyyMMdd")}.log";
  43. var logFilePath = System.IO.Path.Combine(logFolderPath, logFileName);
  44. // 将日志写入文件
  45. System.IO.File.AppendAllText(logFilePath, message);
  46. }
  47. }

使用时,你可以在Startup类的ConfigureServices方法中注册ILoggerProvider,并指定日志文件夹路径:

  1. public void ConfigureServices(IServiceCollection services)
  2. {
  3. // 注册ILoggerProvider
  4. services.AddSingleton<ILoggerProvider>(new ClassNameLoggerProvider("日志文件夹路径"));
  5. // 其他服务配置...
  6. }

然后,在需要记录日志的类中通过依赖注入方式获取ILogger实例,并使用它进行日志记录:

  1. public class MyClass
  2. {
  3. private readonly ILogger<MyClass> logger;
  4. public MyClass(ILogger<MyClass> logger)
  5. {
  6. this.logger = logger;
  7. }
  8. public void DoSomething()
  9. {
  10. logger.LogInformation("Logging message in MyClass");
  11. }
  12. }

每个类都将根据其类名创建一个独立的日志文件。请确保设置正确的日志文件夹路径,并根据需要修改文件名格式和日志级别。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/770789
推荐阅读
相关标签
  

闽ICP备14008679号