阅读量: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"); } }
每个类都将根据其类名创建一个独立的日志文件。请确保设置正确的日志文件夹路径,并根据需要修改文件名格式和日志级别。