Loading

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

posted @ 2021-06-02 09:30  云辰  阅读(1962)  评论(0编辑  收藏  举报