当前位置: 首页 > news >正文

NlogPrismWPF

文章目录

  • Nlog&Prism&WPF
    • 日志模块
    • 实现原理
    • 添加配置
    • 注入服务
    • 应用测试
    • 其他模块怎么调用?

Nlog&Prism&WPF

日志模块

介绍了为WPF框架Prism注册Nlog日志服务的方法

实现原理

无论是在WPF或者ASP.NET Core当中, 都可以使用ServiceCollection来做到着一点, 因为日志框架都提供了IServiceCollection的扩展。
但是, 如果现在你使用的是Prism 8.0的应用程序, Prism提供了多种容器的支持, 例如:DryIoc或者Unity, 这个时候我们如果现在这个基础上实现依赖注入,首先我们需要修改Prism当中创建容器的默认实现, 在其中将ServiceCollection追加到容器当中。
本文的示例主要以DryIoc容器为示例:
这里会主要用到几个相关的依赖:

  • Microsoft.Extensions.DependencyInjection;
  • Microsoft.Extensions.Logging;
  • DryIoc.Microsoft.DependencyInjection;
  • NLog.Extensions.Logging;
    为此, 需要添加一些相关的包,如下所示:
    在这里插入图片描述

添加配置

Nlog.Config:
主要配置Nlog的执行配置规则
要开始配置NLog的NLog.config文件。之前的Nuget下添加Nlog.Config的方式已经呗弃用了。
官方说明如下:
此程序包不是开始使用NLog所必需的:配置文件可以手动创建
(请阅读此处的规范:https://github.com/NLog/NLog/wiki/Configuration-file)或者可以以编程方式创建配置。
(点击此处信息:https://github.com/NLog/NLog/wiki/Configuration-API)
注意:不幸的是,当使用时,此包无法正常工作建议收件人:
-手动下载:https://raw.githubusercontent.com/NLog/NLog/v4.4/src/NuGet/NLog.Config/content/NLog.config-将“复制到输出目录”设置为“如果更新则复制”
NLog.Extensions.Logging: 扩展方法, 用于注册服务
NLog.config文件内容如下

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"autoReload="true"throwExceptions="false"internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log"><targets><target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"layout="${longdate}|${event-properties:item=EventId_Id:whenEmpty=0}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}"  /></targets><rules> <logger name="*" minlevel="Debug" writeTo="f" /> </rules>
</nlog>

注入服务

public partial class App
{protected override IContainerExtension CreateContainerExtension(){var serviceCollection = new ServiceCollection();serviceCollection.AddLogging(configure =>{configure.ClearProviders();configure.SetMinimumLevel(LogLevel.Trace);configure.AddNLog();});// 要注意使用匹配Prism.DryIoc的 DryIoc.Microsoft.DependencyInjection 5.0 的版本,太高的API有变化会报错return new DryIocContainerExtension(new Container(CreateContainerRules()).WithDependencyInjectionAdapter(serviceCollection));}
}

应用测试

使用构造函数注入,并使用日志进行记录

public class LoginViewModel : BindableBase
{private readonly Logger<LoginViewModel> _logger;public LoginViewModel(Logger<LoginViewModel> logger){_logger = logger;logger.LogDebug("Test");}
}

其他模块怎么调用?

首先需要Nuget引入 Microsoft.Extensions.Logging

在这里插入图片描述用法和上面一致`

public class LoginViewModel : BindableBase
{private readonly Logger<LoginViewModel> _logger;public LoginViewModel(Logger<LoginViewModel> logger){_logger = logger;logger.LogDebug("Test");}
}
http://www.lryc.cn/news/211173.html

相关文章:

  • 文件上传漏洞(2), 文件上传实战绕过思路, 基础篇
  • 论文阅读 - Hidden messages: mapping nations’ media campaigns
  • [AutoSAR系列] 1.3 AutoSar 架构
  • 迁移学习 - 微调
  • 09 用户态跟踪:如何使用eBPF排查应用程序?
  • 深入浅出排序算法之堆排序
  • Linux 命令(11)—— tcpdump
  • 8.自定义组件布局和详解Context上下文
  • 几个Web自动化测试框架的比较:Cypress、Selenium和Playwright
  • Android Studio中配置aliyun maven库
  • 记录使用阿里 ARoute 遇到的坑
  • lesson2(补充)关于const成员函数
  • 前端 :用HTML ,JS写一个 双色球彩票中将机制,因为时间不够,加上本人懒没有用CSS美化界面,多包涵
  • 前端页面如何自适应--4种方法
  • 2024王道考研计算机组成原理——总线
  • 【Linux】进程概念(下)
  • 基于Spring Boot的本科生就业质量设计与实现
  • 238. 除自身以外数组的乘积 --力扣 --JAVA
  • 如何判断一个类是线程安全的
  • MyBatis的各种查询功能
  • 【Tomcat】如何在idea上部署一个maven项目?
  • Three.js 材质的 blending
  • 关于pcl 给new出的数据赋值报错问题
  • window11 更改 vscode 插件目录,释放C盘内存
  • 【PyQt学习篇 · ⑥】:QWidget - 事件
  • Vue、jquery和angular之间区别
  • MATLAB算法实战应用案例精讲-【图像处理】机器视觉(基础篇)(六)
  • 硬件知识积累 RS232 接口
  • 机器人入门(四)—— 创建你的第一个虚拟小车
  • 部署K8S