Winform记录日志信息(Serilog.AspNetCore)

摘要:
主要任务是配置Serilog。记住使用||作为输出日志拆分器。使用系统;使用System.Collections。通用的使用系统。组件模型;使用系统。数据使用系统。诊断;使用系统。绘画使用系统。Linq;使用系统。文本使用System.Threading。任务;使用System.Windows。形式;使用Microsoft.AspNetCore。群众或部队的集合;使用Microsoft.Extensions。群众或部队的集合;使用Serilog;使用序列号。事件;namespaceWinFormLog{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_加载{#regionSerialog配置字符串输出模板=“{时间戳:yyyy-MM-ddHH:MM:ss.ffffzzz}| |{级别}|{SourceContext:l}| |{消息}|}异常}|结束{NewLine}”;Log.Logger=newLoggerConfiguration().MinimumLevel.Override.MinimumLevel.Roverride//.MinimumLevel.Voverride.Erich.FromLogContext().WriteTo.Console.WriteTo.File。CreateLogger();#endregionHost.CreateDefaultBuilder().UseSerilog().ConfigureWebHostDefaults.Build()。RunAsync();我的日志。信息;}添加启动。cs文件。代码如下:usingSystem;使用System.Collections。通用的使用系统。Linq;使用系统。文本使用System.Threading。任务;使用LogDashboard;使用Microsoft.AspNetCore。建设者使用Microsoft.AspNetCore。群众或部队的集合;使用Microsoft.Extensions。DependencyInjection;使用Serilog;namespaceWinFormLog{publicclassStartup{privateILoggerlogger;publicILoggerMyLoger{get{if{logger=Log.ForContext<Startup>();}返回记录器;}}publicvoidConfigureServices{MyLoger.Information;services.AddLogDashboard();services.Add Controllers();}publicvoidConfigure{MyLoger.Information;app.UseLogDashboard();app.Use Routing();app.UseEndpoints;}}在此文件中,主要功能是添加LogDashboard组件并配置NETCOREWebAPI路由。完成上述代码后,已安装并配置Serilog和LogDashboard组件:程序输出目录的Logs目录已生成日志文件。浏览器还可以通过输入以下链接打开LogDashboard可视化日志面板。

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添加几个按钮,用于模拟添加普通日志、添加异常日志、打开可视化日志面板网页:

Winform记录日志信息(Serilog.AspNetCore)第1张

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

免责声明:文章转载自《Winform记录日志信息(Serilog.AspNetCore)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Linux驱动设计——字符设备驱动(一)人脸识别Demo解析C#下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DevExpress WinForm MVVM数据和属性绑定指南(Part 1)

根据您绑定的属性,存在以下三种可能的情况: 常规绑定- ViewModel属性绑定到任何不可编辑的View元素属性。由于该元素不可编辑,因此您无需将更新通知发送回绑定属性(单向绑定)。 数据绑定- Model属性(数据字段)绑定到编辑器属性。如果用户可以更改编辑器值,则需要更新绑定属性(双向绑定)。 属性依赖- 来自同一个ViewModel的两个属性被绑...

winform窗体(六)——DataGridView控件及通过此控件中实现增删改查

DataGridView:显示数据表,通过此控件中可以实现连接数据库,实现数据的增删改查 一、后台数据绑定:    List<xxx> list = new List<xxx>();      dataGridView1.DataSource = list;      //设置不自动生成列,此属性在属性面板中没有      data...

C#学习笔记(34)——委托传值(回忆版)

说明(2018-4-6 20:31:03):  1. 昨天晚上看三层,看完第一天的最后一节,会员的修改和增加,感觉欲仙欲死,果断关机睡觉。 2. 上午搞了半天哈利波特的原版书epub的下载,结果都没发现一个排版能看的,就连多看卖的正版里面都是字体大小不一,遂决定先把爱丽丝看完再去寻找其他的。 3. 下午2点起床,开始对着电脑冥想,想那个窗体传值怎么弄的来着...

SQLServer2008-2012资源及性能监控—CPU使用率监控具体解释

前言:CPU是server中最重要的资源。在数据库server中,CPU的使用情况应该时刻监控以便SQLServer一直处于最佳状态。 本文将会使用可靠性和性能监视器来获取CPU相关的使用统计信息 可靠性和性能监视器是过去性能监视器工具的加强版。同一时候拥有性能监视器的所有功能。 性能计数器提供对各种系统活动的统计功能。能够找到有数百种性能计数器来针对W...

渐变颜色LinearGradientBrush

LinearGradientBrush是用来渐变效果的,使用的初始化参数是矩形区域,开始颜色,结束颜色,颜色变化方向,它能够形成比较统一的渐变效果,对比PathGradientBrush的渐变,它的特点是它与周围的颜色渐变频率是一样的,设置LinearGradientBrush的区域大小时,可以想象一个大的有渐变色的长方形,压在多边形上面,并根据多边形的边...

winform 以不规则图形背景显示窗体

一:创建一个winform窗体,把BackgroundImage引入一个不规则的图片,设置属性BackgroundImageLayout为Stretch 二:主要代码 using System; using System.Drawing; using System.Media; using System.Runtime.InteropServices; u...