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

    本文来自博客园,作者:云辰,转载请注明原文链接:https://www.cnblogs.com/yunchen/p/14839931.html

  • 相关阅读:
    JS中!=、==、!==、===的用法和区别
    Jquery判断Checkbox是否选中三种方法
    C# 信号量 学习
    redis学习资料
    Redis常用命令
    MySQL、HBase、ES的对比
    我对依赖注入,控制反转的理解
    net输出错误日志
    XmlExtensions帮助类
    DatetimeHelper类的编写
  • 原文地址:https://www.cnblogs.com/yunchen/p/14839931.html
Copyright © 2011-2022 走看看