WPF开发中遇到的新知识 -- 3
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="xxxx@qq.com" -->
<!-- smtpPassword="xxxxxxxxxxx" -->
<!-- enableSsl="true" -->
<!-- addNewLines="true" -->
<!-- from="xxxx@qq.com" -->
<!-- to="bing@zwbing.com" -->
<!-- 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)}");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?