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
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。