ASP.NET web ILogger日志记录

1、在不使用第三方的日志库我们可以自己这样实现

选举一个测试类

    public class CustomFileLoggerProvider : ILoggerProvider
    {
        private readonly string _path;
        public CustomFileLoggerProvider(string path)
        {
            _path = path;
            Directory.CreateDirectory(Path.GetDirectoryName(_path));
        }
        public ILogger CreateLogger(string categoryName)
        {
            return new CustomFileLogger(_path);
        }

        public void Dispose()
        {
           
        }
    }

    public class CustomFileLogger : ILogger
    {
        private readonly string _path;
        public CustomFileLogger(string path)
        {
            _path = path;
        }
        public IDisposable BeginScope<TState>(TState state) => null;

        public bool IsEnabled(LogLevel logLevel) => true;

        public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
        {
            var logMessage = formatter(state, exception);
            var logFolder = logLevel switch
            {
                LogLevel.Information => "Information",
                LogLevel.Error => "Error",
                LogLevel.Warning => "Warning"
            };
            var logFilePath = $"{_path}/{logFolder}/{string.Format("{0:yyyy}{0:MM}{0:dd}", DateTime.Now)}.txt";
            // Write logMessage to logFilePath
            if (!Directory.Exists($"{_path}/{logFolder}"))
            {
                Directory.CreateDirectory($"{_path}/{logFolder}");
            }
            if (File.Exists(logFilePath))
            {
                using (StreamWriter writer = File.AppendText(logFilePath))
                {
                    writer.WriteLineAsync(logFolder+":"+logMessage);
                }
            }
            else
            {
                File.WriteAllTextAsync(logFilePath, logMessage);
            }
        }
    }

接下来在提交依赖注入

builder.Services.AddLogging(loggingBuilder =>
{
    //loggingBuilder.ClearProviders();
    loggingBuilder.AddProvider(new CustomFileLoggerProvider("D:/Desktop/Logs"));
    //loggingBuilder.AddFilter(string.Format("Logs/Error/{0:yyyy}-{0:MM}-{0:dd}.log", DateTime.Now), LogLevel.Warning);
    //loggingBuilder.AddFilter(string.Format("Logs/Info/{0:yyyy}-{0:MM}-{0:dd}.log", DateTime.Now), LogLevel.Error);
    //loggingBuilder.AddConsole();
    //loggingBuilder.AddFile(o => o.Path = @"D:\Desktop\新建文件夹 (2)");//o => o.Path = @"D:\Desktop\logs\Warning"
});

最后就可以正常使用了

posted @ 2024-12-17 09:46  ¥东方不败  阅读(29)  评论(0)    收藏  举报