当前位置: 首页 > 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");}
}

相关文章:

  • Vue+ElementUI项目打包部署到Ubuntu服务器中
  • 苹果cms模板MXone V10.7魔改版源码 全开源
  • 如何公网远程访问本地WebSocket服务端
  • SQL中使用ROLLUP和CUBE函数轻松生成汇总行
  • MySQL - 为什么索引结构默认使用B+树,而不是其他?
  • 薛定谔的猫重出江湖?法国初创公司AliceBob研发猫态量子比特
  • CentOS 编译安装 nginx
  • 亚信科技:发挥自我优势深入AIGC,并购整合高瞻远瞩致力未来路
  • Java集合类--List集合,Set集合,Map集合
  • 【理论知识:Window Aggregation】flink 窗口聚合功能概述:两种窗口聚合模式的使用例子、功能说明
  • 【JVM】字节码文件的组成部分
  • Ajax学习笔记第二天
  • CCF中国开源大会,中电金信与行业共探AI技术在金融行业的应用和前景
  • npm 彻底卸载
  • 轻量封装WebGPU渲染系统示例<7>-材质多pass(源码)
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 5、React组件事件详解
  • Debian下无root权限使用Python访问Oracle
  • git 常用命令
  • Intervention/image 图片处理扩展包的安装和使用
  • java8 Stream Pipelines 浅析
  • java小心机(3)| 浅析finalize()
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS实现简单的MVC模式开发小游戏
  • Linux链接文件
  • Mithril.js 入门介绍
  • Python3爬取英雄联盟英雄皮肤大图
  • vue-cli3搭建项目
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 回流、重绘及其优化
  • 力扣(LeetCode)22
  • 入手阿里云新服务器的部署NODE
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 一个完整Java Web项目背后的密码
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)使用竞争神经网络实现数据聚类
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (补)B+树一些思想
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (六)vue-router+UI组件库
  • (论文阅读11/100)Fast R-CNN
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)linux文件内容查看
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)setTimeout 和 setInterval 的区别
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .Net core 6.0 升8.0