1.注意:必須使用.net Core以上版本的winform才能使用,.Net4.X系列無法使用,建議使用.Net 5創建。
2. 添加ASP.NET Core
、Serilog
支持
2.1 Nuget 安裝相關Nuget包
Microsoft.Extensions.Hosting
要指定版本,不能高於2.2.0:
Install-Package Microsoft.Extensions.Hosting -Version 2.2.0 Install-Package Serilog.AspNetCore Install-Package LogDashboard
2.2 配置 Serilog 和 ASP.NET Core
打開Form.cs
文件,添加如下代碼。主要是配置Serilog
,記得輸出日志分割符使用 ||。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; namespace WinFormLog { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { #region Serilog配置 string logOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} || {Level} || {SourceContext:l} || {Message} || {Exception} ||end {NewLine}"; Log.Logger = new LoggerConfiguration() .MinimumLevel.Override("Default", LogEventLevel.Information) .MinimumLevel.Override("Microsoft", LogEventLevel.Error) //.MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console(theme: Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme.Code) .WriteTo.File($"{AppContext.BaseDirectory}Logs/Log.log", rollingInterval: RollingInterval.Day, outputTemplate: logOutputTemplate) .CreateLogger(); #endregion Host.CreateDefaultBuilder() .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).Build().RunAsync(); MyLoger.Information("測試今天的日期"); }
添加Startup.cs
文件,代碼如下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using LogDashboard; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.DependencyInjection; using Serilog; namespace WinFormLog { public class Startup { private ILogger logger; public ILogger MyLoger { get { if (logger == null) { logger = Log.ForContext<Startup>(); } return logger; } } public void ConfigureServices(IServiceCollection services) { MyLoger.Information("ConfigureServices"); services.AddLogDashboard(); services.AddControllers(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { MyLoger.Information("Configure"); app.UseLogDashboard(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } } }
在該文件中,主要作用是添加LogDashboard
組件,配置.NET CORE Web API
路由。
完成上面的代碼,Serilog
和LogDashboard
兩個組件其實已經安裝、配置完成了:
- 程序輸出目錄的Logs目錄已經產生了日志文件。
- 瀏覽器輸入下面的鏈接,也能打開
LogDashboard
可視化日志面板了。 -
http://localhost:5000/logdashboard
3. WinForm窗體中使用Serilog
主窗體Form
添加幾個按鈕,用於模擬添加普通日志、添加異常日志、打開可視化日志面板網頁:
Form.cs
中完成上面所說的功能(完整代碼):
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; using Serilog; using Serilog.Events; namespace WinFormLog { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private ILogger logger; public ILogger MyLoger { get { if (logger == null) { //需要添加使用的當前類名空間名稱,不加的話,不顯示 logger = Log.ForContext<Form1>(); } return logger; } } private void Form1_Load(object sender, EventArgs e) { #region Serilog配置 string logOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} || {Level} || {SourceContext:l} || {Message} || {Exception} ||end {NewLine}"; Log.Logger = new LoggerConfiguration() .MinimumLevel.Override("Default", LogEventLevel.Information) .MinimumLevel.Override("Microsoft", LogEventLevel.Error) //.MinimumLevel.Override("Microsoft.Hosting.Lifetime", LogEventLevel.Information) .Enrich.FromLogContext() .WriteTo.Console(theme: Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme.Code) .WriteTo.File($"{AppContext.BaseDirectory}Logs/Log.log", rollingInterval: RollingInterval.Day, outputTemplate: logOutputTemplate) .CreateLogger(); #endregion Host.CreateDefaultBuilder() .UseSerilog() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).Build().RunAsync(); MyLoger.Information("測試今天的日期"); } private void button1_Click(object sender, EventArgs e) { OpenUrl("http://localhost:5000/logdashboard"); } private void OpenUrl(string url) { Process.Start(new ProcessStartInfo("cmd", $"/c start {url}") { UseShellExecute = false, CreateNoWindow = true }); } private void button2_Click(object sender, EventArgs e) { MyLoger.Information("提示"); } } }
文章轉載至:
作者:Dotnet9
鏈接:https://dotnet9.com/17898.html
來源:Dotnet9
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。