Winform記錄日志信息(Serilog.AspNetCore)


1.注意:必須使用.net Core以上版本的winform才能使用,.Net4.X系列無法使用,建議使用.Net 5創建。


 

2. 添加ASP.NET CoreSerilog支持


  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路由。

完成上面的代碼,SerilogLogDashboard兩個組件其實已經安裝、配置完成了:

  1. 程序輸出目錄的Logs目錄已經產生了日志文件。
  2. 瀏覽器輸入下面的鏈接,也能打開LogDashboard可視化日志面板了。
  3. 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
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM