(WPF)Serilog 使用demo实例

Serilog 日志效果:

引入的Serilog库文件

实现代码

xaml 代码:

<Window x:Class="Wpf_demo_Serilog.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:Wpf_demo_Serilog"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="600">
    <Grid>
        <StackPanel Orientation="Horizontal" Height="50" Width="300">
            <Button Content="info log" Click="Button_Click" Margin="10"/>
            <Button Content="error log" Click="Button_Click_1" Margin="10"/>
            <Button Content="debug log" Click="Button_Click_2" Margin="10"/>
        </StackPanel>
    </Grid>
</Window>

xaml.cs 代码:

using System.Threading.Tasks;
using System.Windows;

namespace Wpf_demo_Serilog
{

    public partial class MainWindow : Window
    {
        // at the beginning of the class
        private static Serilog.ILogger Logger => Serilog.Log.ForContext<MainWindow>();

        

        public MainWindow()
        {
            InitializeComponent();           
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Logger.Information("Hello World!");
        }

        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Logger.Information("Hello World!");
            TestClass1 tc = new TestClass1();
            tc.TestLog();
        }

        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            Logger.Debug("Hello China!");
            Task.Run(() =>
            {
                Logger.Information("HI~!");
            });
        }
        
    }
}

cs 代码:

using Serilog;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace Wpf_demo_Serilog
{
    public class TestClass1
    {
        private static Serilog.ILogger Logger => Serilog.Log.ForContext<TestClass1>();

        public  void TestLog()
        {
            try
            {
                int[] numbers = { 1, 2, 3 };
                Console.WriteLine(numbers[9]); // 不存在会报错!
            }
            catch (Exception ex)
            {
                Logger.Error(ex.ToString());
            }

        }
    }
}

using Serilog;
using Serilog.Configuration;
using Serilog.Core;
using Serilog.Events;
using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Windows;
using System.Windows.Threading;

namespace Wpf_demo_Serilog
{   

    public partial class App : Application
    {
        public App()
        {
            InitLog();
        }

        private void InitLog()
        {
            StackTrace trace = new StackTrace();
            //获取是哪个类来调用的
            string sourceClass = trace.GetFrame(1).GetMethod().DeclaringType.Name;
            //LoggingExtensions.WithClassName();
            // 创建全局静态实例
            Log.Logger = new LoggerConfiguration()
                .Enrich.FromLogContext()
                .Enrich.WithThreadId()
                .Enrich.WithProcessId()                 
                //设置最低等级
                .MinimumLevel.Verbose()               
                //将事件发送到文件
                //{Message:lj}表示将消息序列化成json字符串,string类型除外(j表示json,l表示except for string literals)
                //{Level:u3}表示将日志等级的输出显示为3个大写字符,如DBG、INF、ERR等。{Level:w3}表示三个字符的小写,
                //{Properties:j}用来显示额外的上下文信息
                .WriteTo.File(@".\Log\Log.txt",             /*日志文件名*/
                    outputTemplate:                         /*设置输出格式,显示详细异常信息*/
                    @"{Timestamp:yyyy-MM-dd HH:mm-ss.fff }[{Level}] (ThreadId:{ThreadId} ProcessId:{ProcessId} Class:{SourceContext}) {Message:lj}{NewLine}{Exception}",
                    rollingInterval: RollingInterval.Day,   /*日志按日保存*/
                    rollOnFileSizeLimit: true,              /*限制单个文件的最大长度*/
                    encoding: Encoding.UTF8,                /*文件字符编码*/
                    retainedFileCountLimit: 10,             /*最大保存文件数*/
                    fileSizeLimitBytes: 10 * 1024)          /*最大单个文件长度*/
                .CreateLogger();
        }

        protected override void OnStartup(StartupEventArgs e)
        {
            this.DispatcherUnhandledException += App_DispatcherUnhandledException;
            this.Dispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;
            this.Dispatcher.UnhandledException += Dispatcher_UnhandledException;

            base.OnStartup(e);
        }

        private void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            Log.Error("[App_DispatcherUnhandledException] " + e?.Exception);
            e.Handled = true;
        }

        private void Dispatcher_UnhandledExceptionFilter(object sender, DispatcherUnhandledExceptionFilterEventArgs e)
        {
            Log.Error("[Dispatcher_UnhandledExceptionFilter] " + e?.Exception);
        }

        private void Dispatcher_UnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
        {
            Log.Error("[Dispatcher_UnhandledException] " + e?.Exception);
            e.Handled = true;
        }
    }
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/247608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Keil uVersion 4单片机开发指南

1 软件安装 双击打开C51V901.exe 弹出安装界面&#xff0c;点击Next>> 点击同意协议勾选框&#xff0c;接着点击Next>> 点击Browse...选择合适的目录&#xff0c;接着点击Next>> 按要求填写相关信息&#xff0c;然后点击Next>> 软件安装中&#xff0c…

【SpringBoot】配置文件

配置文件官网 1. 配置方式 application.propertiesapplication.yml / application.yaml 2. 自定义配置信息 将实体类中的本应该写死的信息写在属性配置文件中。 可以使用 Value("${键名}") 获取&#xff0c;也可以使用 ConfigurationProperties(prefix"前…

ISCTF(CRYPTO)

easy_rsa nc连接看看 脚本 import gmpy2import libnumfrom Crypto.Util.number import *from binascii import a2b_hex, b2a_hexflag "*****************"p 11920076502966619778438716819444048800827104655497817807132072529253600622832779629686654276924193…

2024年外贸开发客户攻略,外国客户都在用哪些社交平台?

在之前的文章中&#xff0c;东哥我就讲过做外贸&#xff0c;开发客户很重要&#xff0c;我也曾经总结了几个外贸开发客户的方法给大家参考&#xff0c;不知道大家学会了没&#xff1f;都知道大多数客户喜欢花大量时间泡在社交软件上&#xff0c;所以有不少兄弟对海外社交媒体平…

蓝桥杯真题——01背包问题(java详解)

目录 01背包问题例题引入 蓝桥杯国赛真题 蓝桥杯2195题.费用报销 蓝桥杯2201题.搬砖 01背包问题和最值问题离不开&#xff0c;最值问题嘛&#xff0c;就又和动态规划离不开&#xff0c;大家不太了解动态规划的可以看我之前写的文章&#xff0c;基础版里面有动态规划的模板。…

中文字符串逆序输出

今天碰到这个题&#xff0c;让我逆序输出中文字符串&#xff0c;可给我烦死了&#xff0c;之前没有遇到过&#xff0c;也是查了资料才知道&#xff0c;让我太汗颜了。 英文字符串逆序输出很容易&#xff0c;开辟一块空间用来存放逆序后的字符串&#xff0c;从后往前遍历原字符串…

西南交通大学【数电实验8---外星萤火虫设计】

一、实验电路图、状态图、程序代码、仿真代码、仿真波形图&#xff08;可以只写出核心功能代码&#xff0c;代码要有注释&#xff09; 代码文件 激励文件 Modelsim仿真 二、引脚分配表&#xff08;电路中的信号名称->主板器件名称->引脚号PIN&#xff09; 信号名 主板器…

【C++初阶】类与对象(上)

类与对象&#xff08;上&#xff09; 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化7.类对象模型7.1 如何计算类对象的大小7.2 结构体内存对齐规则 8.this指针8.1 this指针的引出8.2 this指针的特性…

微软microsoft推出了最新的小型但强大的开源语言AI模型Phi-2

微软推出了最新的小型开源语言模型 Phi-2。该模型只有 27 亿个参数&#xff0c;却能超过比它大 25 倍的模型的性能。Phi-2 是微软 Phi 项目的一部分&#xff0c;旨在制作小而强大的语言模型。该项目包括 13 亿参数的 Phi-1&#xff0c;据称在 Python 编码方面实现了最先进的性能…

如何使用mysql去除表中重复的字段

简介&#xff1a; 此处的建表题目来自我们的也门哥Maged&#xff0c;非常感谢他出的这些测试题目&#xff0c;让我能够独立思考&#xff0c;反复试去找到cw2的正确做法。 数据库准备&#xff1a; 害怕被好homi被刺然后被 academic warning 所以浅浅打个码。 创建好这张表后我…

ipad协议限制号版

特别声明&#xff1a;仅供学习交流 Applet显示/隐藏显示操作展开操作 POST /api/Applet/GetRandomAvatar 提取一个随机昵称和照片 POST /api/Applet/UploadAvatarImg 上传小程序身份照片 POST /api/Applet/AddAvatar 增加一个小程序身份 POST /api/Applet/OauthSdkApp 授权A…

ShellCode注入程序

程序功能是利用NtQueueApcThreadEx注入ShellCode到一个进程中&#xff0c;程序运行后会让你选择模式&#xff0c;按1为普通模式&#xff0c;所需的常规API接口都是使用Windows原本正常的API&#xff1b;在有游戏保护的进程中Windows原本正常的API无法使用&#xff0c;这时候需要…

绘图示例---QT手动调用绘图事件,按钮控制图片

效果&#xff1a; 点击 “移动” 图片向右移动20&#xff0c;点击 “西理win嘛” 图片每秒向右移动20 QQ录屏20231212164128 下面时代码详解&#xff1a; 注意使用UI和代码实现按钮的不同 UI: ui->pushButton->setGeometry(windowWidth-105, windowHeight-25, 100, 20);…

ChatGPT 也宕机了?如何预防 DDOS 攻击的发生

最近&#xff0c;开发人工智能聊天机器人的公司 OpenAI 遭受了一次规模较大的分布式拒绝服务&#xff08;DDoS&#xff09;攻击&#xff0c;导致其旗下的 ChatGPT 服务在短短 12 小时内遭遇了 4 次断网&#xff0c;众多用户遭受了连接失败的问题。 这次攻击事件引起了广泛的关…

C++ stringOJ练习题

目录 把字符串转换成整数 反转字符串 字符串中的第一个唯一字符 字符串最后一个单词的长度 找出字符串中第一个只出现一次的字符 字符串相加 字符串最后一个单词长度 字符串相乘 反转字符串3 反转字符串2 验证回文串 把字符串转换成整数 通过遍历字符串并逐位转换…

漏洞复现-浙大恩特客户资源管理系统CustomerAction.entphone;.js 接口任意文件上传漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【开发工具】最新VMWare无法识别USB设备,驱动错误,未知错误【2023.12.15】

解决方案1&#xff1a;在这里改下连接方式 多试试 解决方案2 控制面板卸载程序&#xff0c;进行VMWare的修复 解决方案3 对于Windows7系统&#xff0c;切换解决方案1的usb类型为3.1&#xff0c;并下载这个intel的驱动包到虚拟机里 https://www.intel.com/content/www/us/en/do…

毅速:金属3D打印引领制造业进入新时代

随着科技的飞速发展&#xff0c;3D打印技术逐渐渗透到各个领域&#xff0c;为制造业带来了革命性的变革。其中&#xff0c;金属3D打印技术以其独特的优势&#xff0c;正逐渐成为制造业的新宠。 金属3D打印&#xff0c;也称为金属粉末烧结&#xff0c;是一种利用高能激光束将金属…

【JUC】三十、什么是AQS

文章目录 0、背景1、AQS介绍2、AQS核心概念3、AQS是JUC的基石4、锁和同步器的关系5、AQS的作用6、state和CLH队列6、AQS的内部类Node 0、背景 一段常见的代码&#xff1a; Lock lock new ReentrantLock(); lock.lock; try{//do Something } finally{lock.unlock(); }简单的一…

10分钟利用宝塔面板在阿里云服务器部署个人网页

目录 1、申请阿里云服务器 2、更换镜像&#xff08;可选&#xff09; 3、远程链接阿里云服务器安装宝塔面板 4、开放安全组 5、宝塔面板上传项目文件 1、申请阿里云服务器 购买链接->阿里云服务器购买 个人购买的就是这款&#xff0c;比较经济合算&#xff0c;而且2核…