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

avatar
作者
筋斗云
阅读量:0

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

using Microsoft.Extensions.Logging; using System;  public class ClassNameLoggerProvider : ILoggerProvider {     private readonly string logFolderPath; // 日志文件夹路径      public ClassNameLoggerProvider(string folderPath)     {         logFolderPath = folderPath;     }      public ILogger CreateLogger(string categoryName)     {         var className = categoryName.Substring(categoryName.LastIndexOf(".") + 1); // 获取类名         var logger = new ClassNameLogger(className, logFolderPath);         return logger;     }      public void Dispose()     {         // 可以在这里释放资源     } }  public class ClassNameLogger : ILogger {     private readonly string className;     private readonly string logFolderPath;      public ClassNameLogger(string name, string folderPath)     {         className = name;         logFolderPath = folderPath;     }      public IDisposable BeginScope<TState>(TState state)     {         return null; // 如果需要支持作用域,请返回一个实现了IDisposable接口的对象     }      public bool IsEnabled(LogLevel logLevel)     {         return true; // 指定日志级别,这里设置为所有级别都输出日志     }      public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)     {         var message = formatter(state, exception);          // 根据类名创建日志文件名         var logFileName = $"{className}_{DateTime.Now.ToString("yyyyMMdd")}.log";         var logFilePath = System.IO.Path.Combine(logFolderPath, logFileName);          // 将日志写入文件         System.IO.File.AppendAllText(logFilePath, message);     } }

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

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

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

public class MyClass {     private readonly ILogger<MyClass> logger;      public MyClass(ILogger<MyClass> logger)     {         this.logger = logger;     }      public void DoSomething()     {         logger.LogInformation("Logging message in MyClass");     } }

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

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!