.NET Core 2 日志记录与Excel文件读取

在.NET Core 2中实现配置化的日志记录并持久化到文件,以及读取Excel文件,是本文要介绍的两个主要功能。这些功能对于开发具有日志记录需求的.NET Core应用程序至关重要。

本文的撰写源于作者在寻找关于.NET Core日志记录和Excel文件读取的有用信息时,不得不多次浏览互联网,但找到的文章都不能完整地帮助作者实现目标。

代码使用

本文提供的代码片段是作者为了实现上述功能而编写的,可以作为.NET Core应用程序开发中的一个起点。

日志记录

本文介绍的日志记录方法适用于.NET Core控制台应用程序,也可以稍作修改后用于ASP.NET Core项目。目标是实现良好的控制台日志记录,并配置日志级别,同时实现日志持久化到文件。

本文的解决方案包括以下文件:

  • Program.cs
  • App.cs
  • appsettings.json

在Program.cs中,创建服务集合,配置服务,并运行应用程序。

using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using Serilog; using Serilog.Events; using System; namespace ExcelDataReaderPoc { class Program { static void Main(string[] args) { var serviceCollection = new ServiceCollection(); ConfigureServices(serviceCollection); var serviceProvider = serviceCollection.BuildServiceProvider(); serviceProvider.GetService().Run(); } private static void ConfigureServices(IServiceCollection serviceCollection) { var configuration = new ConfigurationBuilder() .SetBasePath(AppContext.BaseDirectory) .AddJsonFile("appsettings.json", false) .Build(); serviceCollection.AddSingleton(new LoggerFactory() .AddConsole(configuration.GetSection("Logging")) .AddSerilog() .AddDebug()); serviceCollection.AddLogging(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .MinimumLevel.Override("Microsoft", LogEventLevel.Information) .WriteTo.RollingFile(configuration["Serilog:LogFile"]) .CreateLogger(); serviceCollection.AddSingleton(configuration); serviceCollection.AddTransient(); } } }

在App.cs中,定义了一个应用程序类,用于读取Excel文件并记录日志。

using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging; using OfficeOpenXml; using System; using System.IO; using System.Text; namespace ExcelDataReaderPoc { public class App { private readonly ILogger _logger; private readonly IConfigurationRoot _config; public App(ILogger logger, IConfigurationRoot config) { _logger = logger; _config = config; } public void Run() { // 测试日志级别 _logger.LogTrace("LogTrace"); _logger.LogDebug("LogDebug"); _logger.LogInformation("LogInformation"); _logger.LogWarning("LogWarning"); _logger.LogError("LogError"); _logger.LogCritical("LogCritical"); // 读取Excel文件 var filePath = @"D:/test.xlsx"; FileInfo file = new FileInfo(filePath); using (ExcelPackage package = new ExcelPackage(file)) { StringBuilder sb = new StringBuilder(); ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; int rowCount = worksheet.Dimension.Rows; int colCount = worksheet.Dimension.Columns; var rawText = string.Empty; for (int row = 1; row <= rowCount; row++) { for (int col = 1; col <= colCount; col++) { rawText += worksheet.Cells[row, col].Value.ToString() + "\t"; } rawText += "\r\n"; } _logger.LogInformation(rawText); } Console.ReadKey(); } } }

在appsettings.json文件中,配置了日志级别和Serilog的文件输出路径。

{ "Configuration": { "Title": "Excel Data Reader POC Application" }, "Logging": { "IncludeScopes": false, "Debug": { "LogLevel": { "Default": "Trace" } }, "Console": { "LogLevel": { "Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning", "Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug", "Microsoft.AspNetCore.Mvc.Razor": "Error", "Default": "Trace" } }, "LogLevel": { "Default": "Trace" } }, "Serilog": { "LogFile": "C:/Logs/ExcelDataReaderPoc.log", "MinimumLevel": "Verbose" } }

读取Excel文件

.NET Core中读取Excel文件是一个常见的需求。作者尝试了多种方法,最终发现使用EPPlus.Core库可以很好地实现这一功能。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485