首页 > 其他分享 >WPF开发中遇到的新知识 -- 3

WPF开发中遇到的新知识 -- 3

时间:2022-09-25 09:11:57浏览次数:39  
标签:-- 知识 然后 Nlog 组件 WPF 日志

WPF中Nlog日志组件的使用

目的:希望在WPF的运作中,记录一些关键操作的信息,记录一些错误发生的信息

方法:查阅一些资料发现,大部分组件的方式都是在ASP中直接通过服务的形式注册在容器中的,但是对于在Prism中,却没有找到很好的配套组件,所以就直接使用比较原始的方法去使用日志组件,这里选择的是Nlog组件

  • 首先是添加Nlog组件包,然后网上的一些资料和新版本的Nlog有差距,当前使用的是5.0.4版本的Nlog,在WPF中安装包之后,是不会自动生成一个Nlog.config文件的,然后还有一些资料说需要安装Nlog.Config包的,但是这个包停留在4.7.15,然后已经被弃用了,然后官方原话就是推荐我们去github手动下载Nlog.config文件
  • 然后是配置Nlog.config文件,这个我是直接在网上挑了一份比较完整正式的文件,而且Nlog的配置个人认为是比较易懂的,稍微有些其他语言基础,或者曾经使用过其他日志组件的,基本都能看懂,具体的建议直接看官方文档,是最快速的

需要注意的是,这个配置文件是放在项目的根目录中,然后需要将文件的copy属性设置为copy if newer,然后Build Action 要选None,我之前以为和图片等文件一样需要选择为Resource,但是选了之后,配置文件就不生效了,所以要选None

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true">

    <!-- <extensions> -->
    <!--     <add assembly="NLog.MailKit"/> -->
    <!-- </extensions> -->

    <targets xsi:type="AsyncWrapper">
        <!--保存至文件-->
        <target name="log_file" xsi:type="File"
                fileName="${basedir}/Logs/${shortdate}/${level}.txt"
                layout="机器:${machinename} ${newline}时间:${longdate} ${newline}级别:${level} ${newline}进程:${processid} ${newline}线程:${threadid} ${newline}内容:${message} ${newline}堆栈:${stacktrace} ${newline}位置:${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True} ${newline}${newline}"/>
        <!--输出至Debugger-->
        <!--<target name="debug" xsi:type="Debug"
                header="*********************"
                layout="机器:${machinename} ${newline}时间:${longdate} ${newline}级别:${level} ${newline}进程:${processid} ${newline}线程:${threadid} ${newline}内容:${message} ${newline}堆栈:${stacktrace} ${newline}位置:${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}"
                footer="*********************${newline}${newline}" />-->
        <!--输出至控制台-->
        <!-- <target name="console" xsi:type="ColoredConsole" -->
        <!--         layout="机器:${machinename} ${newline}时间:${longdate} ${newline}级别:${level} ${newline}进程:${processid} ${newline}线程:${threadid} ${newline}内容:${message} ${newline}堆栈:${stacktrace} ${newline}位置:${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True} ${newline}${newline}"/> -->
        <!--输出至邮件-->
        <!-- <target xsi:type="Mail" name="infoMail" -->
        <!--         smtpServer="smtp.qq.com" -->
        <!--         smtpPort="465" -->
        <!--         smtpAuthentication="Basic" -->
        <!--         smtpUserName="[email protected]" -->
        <!--         smtpPassword="xxxxxxxxxxx" -->
        <!--         enableSsl="true" -->
        <!--         addNewLines="true" -->
        <!--         from="[email protected]" -->
        <!--         to="[email protected]" -->
        <!--         subject="来自:${machinename}的自动签到提醒" -->
        <!--         header="*********************" -->
        <!--         body="机器:${machinename} ${newline}时间:${longdate} ${newline}级别:${level} ${newline}进程:${processid} ${newline}线程:${threadid} ${newline}内容:${message} ${newline}堆栈:${stacktrace} ${newline}位置:${callsite:className=True:fileName=True:includeSourcePath=True:methodName=True}" -->
        <!--         footer="*********************" /> -->
    </targets>


    <rules>
        <logger name="Microsoft.*" minlevel="Trace" writeTo="log_file" final="true" />
        <logger name="*" level="Info" writeTo="log_file" />
        <logger name="*" level="Error" writeTo="log_file" />
        <logger name="*" level="Debug" writeTo="log_file" />
        <!--<logger name="*" minlevel="Trace" writeTo="debug" />-->
        <logger name="*" level="Fatal" writeTo="log_file" />
        <!-- <logger name="*" minlevel="Info" writeTo="infoMail" /> -->
        <logger name="*" level="Warn" writeTo="log_file" />
    </rules>
</nlog>
  • 最后是使用日志组件,按照官方的最简单方法,就是在需要记录日志的类中,创建日志记录器,然后记录就好
public class ActionArgsViewModel : BindableBase
{
    private static readonly Logger Logger = LogManager.GetCurrentClassLogger();

    private async void DeleteAction()
    {
        Logger.Info($"删除动作参数: {JsonSerializer.Serializ(SelectedActionArg)}");
    }
}

标签:--,知识,然后,Nlog,组件,WPF,日志
From: https://www.cnblogs.com/huangwenhao1024/p/16727238.html

相关文章

  • WPF开发中遇到的新知识 -- 2
    RestSharp的简单使用目的:希望在WPF应用中发送HTTP请求,获取后台数据方法:在网上的一些搜索结果中,推荐使用的方式有HttpClient、HttpClientFactory、refit和RestSharp,其中......
  • token 登录模式了解过吗 ?
    token是服务器端生成的一个字符串,当作客服端请求的一个令牌,在第一次登陆成功之后,服务器端会生成一个token,客户端必须要携带token才能请求数据token的具体逻辑如下:......
  • nacos 临时实例与持久实例
    nacos临时实例与持久实例一、两者区别 临时实例   默认情况,服务实例仅会注册在Nacos内存,不会持久化到Nacos磁盘,其健康检测机制为Client模式,即Client主动向Server上报......
  • P8548 小挖的买花
    小挖的买花题目背景小挖喜欢买花,但是ta太懒了!所以这个任务全权交给了你。题目描述花店里只有\(n\)株花,每一株花都有三个属性:价格\(cost_i\)、美丽度\(be_i\)、新......
  • seata的部署和集成
    seata的部署和集成一、部署Seata的tc-serverwindow版安装1.下载首先我们要下载seata-server包,地址在http://seata.io/zh-cn/blog/download.html   2.解压在非......
  • 讲讲回流和重绘的区别,如何避免回流和重绘?
    回流:当元素的尺寸,结构属性改变,浏览器需要重新渲染部分或全部文档流的过程浏览器首次加载元素尺寸位置改变元素内容改变字体大小改变添加删除dom元素重绘:元素样......
  • typedef 结构体类型名可以相同
    typedefstructWebsMime{ char*type;/**<Mimetype*/ char*ext;/**<Fileextension*/}WebsMi......
  • CSS边框
    一、CSSborder属性用于指定元素边框的样式、宽度和颜色。即使用border-style,通过设置其适当的值来更改样式。border-style允许的值包括:--dotted:定义点线边框。--dash......
  • ASP.NET Core使用承载启动(HostingStartup)程序集
    概念#    在ASP.NETCore中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup。如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉。我们常说AOP......
  • This MySqlConnectioin is already in Use异常处理
    ThisMySqlConnectioinisalreadyinUse异常处理记录今天使用EFCore和Mysql的时候,遇到了一个问题,具体描述如下:Nuget安装了Pomelo.EntityFrameworkCore.MySql,然后在同......