(八)日志与系统配置管理
1.Nlog
1.1 简介

NLog是一个基于.NET平台编写的日志记录类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。
官网地址:https://nlog-project.org/
文档地址:https://github.com/NLog/NLog/wiki
怎么配置
1.2 配置
配置文件
<?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" >
<targets>
<!--输出目标:name名称f,xsi:type输出类型文件, fileName输出到程序根目录logs文件夹中, 以日期作为生成log文件名称, layout生成内容的格式-->
<target name="f"
xsi:type="File"
fileName="${basedir}/logs/${shortdate}.log"
layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>
<rules>
<!--日志路由规则:最低级别Debug,输出到target目标f-->
<logger name="*" minlevel="Debug" writeTo="f" />
</rules>
</nlog>
而且需要复制到输出目录

1.3 静态类

在app中添加不同的日志回调函数

1.4 测试


使用,可以在抛出异常时记录

2.创建prism对话框viewmodel基类
- 继承IDialogAware
![image]()
3. 创建系统配置模块
有一些系统设置参数需要保存到json,xml等文件中
-
用户控件库
-
包:prism unity,reactiveui.wpf ,reactiveui.fody
-
引用
![image]()
-
模块配置
![image]()
-
生成配置
![image]()
-
在硬件加载初始化之前就应该读到硬件的设置参数,在 初始化硬件的时候就把参数填入配置了,所以初始化模块依赖于配置模块
![image]()
-
创建views viewmodels
![image]()
4.系统配置模块的业务逻辑
- 在菜单页面添加命令,点击系统设置,弹出对话框
![image]()
- 对应viewmodel
![image]()
- 回来注册对话框页面
![image]()
5.json的序列号和反序列化
- 安装包
![image]()
/// <summary>
/// JSON文件的序列化和反序列化帮助类
/// </summary>
public static class JsonHelper
{
/// <summary>
/// 加载某个JSON文件并返回指定的类型实例 反序列化过程
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fileName"></param>
/// <returns></returns>
public static T Load<T>(string fileName)
{
if (!File.Exists(fileName))
{
return default(T);
}
string content=File.ReadAllText(fileName);
return Deserialize<T>(content);
}
private static T Deserialize<T>(string content)
{
return JsonConvert.DeserializeObject<T>(content);
}
/// <summary>
/// 将指定的类型实例保存位JSON文件
/// </summary>
/// <param name="obj"></param>
/// <param name="fileName"></param>
/// <param name="indented"></param>
public static void Save(object obj,string fileName,bool indented=false)//缩进
{
string content = Serialize(obj, indented);
}
private static string Serialize(object obj, bool indented)
{
Formatting formatting = indented ? Formatting.Indented : Formatting.None;
return JsonConvert.SerializeObject(obj,formatting);
}
}
6.系统配置管理器
- 创建枚举类,因为配置文件有不同的类型,给他们设置键名
![image]()
- 编写接口:一个读方法,一个写方法
![image]()
- 编写实现类,标注ExposedService会自动创建实例
//表示根目录文件夹Config
private const string root = "Config";
/// <summary>
/// 获取当前JSON文件的完整路径
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private string GetFullPath(ValueType key)
{
return Path.Combine(root,key.GetType().FullName+key.ToString()+".json");
}
/// <summary>
/// 读配置文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
public T Read<T>(ValueType key)
{
string fileName=GetFullPath(key);
return JsonHelper.Load<T>(fileName);
}
/// <summary>
/// 写配置文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <param name="value"></param>
public void Write<T>(ValueType key, T value)
{
Assert.NotNull(value);
Assert.NotNull(key);
Directory.CreateDirectory(root);//创建根目录
string fileName = GetFullPath(key);
JsonHelper.Save(value, fileName, true);
}














浙公网安备 33010602011771号