Wpf使用NLog将日志输出到LogViewer

1 LogViewer

LogViewer是通过UDP传输的高性能实时log查看器。

具有一下特性:

  • 通过UDP读取日志
  • 通过文件导入日志
  • 导出日志到一个文件中
  • 排序、过滤(日志树,日志等级)和查找
  • 突出显示搜索文本
  • 从UPD接收日志时忽略IP地址列表
  • 多接收器支持
  • 多种颜色主题

项目地址:https://github.com/Styort/LogViewer

2 将NLog日志输出到LogViewer中

2.1 新建wpf项目并添加nlog

wpf项目采用Prism框架,项目名称:LogToLogViewerApp

2.2 添加nlog库及nlog.config文件

nlog库

复制代码
<PackageReference Include="NLog" Version="5.3.4" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.13" />

<?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"
      autoReload="true"
      throwExceptions="true"
      internalLogFile="c:\temp\console-example-internal.log"
      internalLogLevel="Info">
	<targets async="true">
		<target name="log4view" xsi:type="NLogVIewer" address="udp://127.0.0.1:7071"/>
	</targets>
	<rules>
		<logger name="*" minlevel="Trace" writeTo="log4view"></logger>
	</rules>
</nlog>

将nlog.config文件设置成如果较新则复制。

需要的其他依赖包:

复制代码
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.3.2" />
<PackageReference Include="DryIoc.Microsoft.DependencyInjection" Version="8.0.0-preview-02" />
2.3 在app.xaml.cs文件中依赖注入功能

重写CreateContainerExtension方法如下:

复制代码
protected override IContainerExtension CreateContainerExtension()
{
    var services = new ServiceCollection();
    services.AddLogging(builder =>
    {
        builder.ClearProviders();
        builder.SetMinimumLevel(LogLevel.Debug);
        builder.AddNLog();
    });
    var container = new DryIoc.Container(CreateContainerRules());
    var x = container.WithDependencyInjectionAdapter(services);

    return new DryIocContainerExtension(x.Container);
    //return base.CreateContainerExtension();
}

2.4 在mainwindowviewmodel中使用注入ilogger接口并输出日志

在构造函数中注入ilogger,添加一个Log方法用于日志的输出

复制代码
public MainWindowViewModel(ILogger<MainWindowViewModel> logger)
{
    _logger = logger;
}

[RelayCommand]
private void Log()
{
    _logger.LogTrace("Log Trace");
    _logger.LogDebug("Log Debug");
    _logger.LogInformation("Log Information");
    _logger.LogWarning("Log Warning");
    _logger.LogError("Log Error");
    _logger.LogCritical("Log Critical");
}

3 总结

使用LogViewer可以接收多个app端的日志输出,并可以根据需要选择显示的日志级别。有助于开发人员可以实时关注程序的运行流程。

相关推荐
Java林间7 小时前
Zookeeper是什么?基于zookeeper实现分布式锁
分布式·zookeeper·wpf
zizisuo11 小时前
1.微服务拆分与通信模式
微服务·wpf
程序员秘密基地15 小时前
基于c#,wpf,ef框架,sql server数据库,音乐播放器
sql·sqlserver·c#·.net·wpf
Zhen (Evan) Wang15 小时前
.NET 6 WPF 利用CefSharp.Wpf.NETCore显示PDF文件
.net·wpf·.netcore
冰茶_2 天前
WPF特性分析
学习·microsoft·c#·wpf
qq_196055872 天前
最快打包WPF 应用程序
wpf
baivfhpwxf20233 天前
wpf ScaleTransform
wpf
C#_西哥4 天前
wpf stylet框架 关于View与viewmodel自动关联绑定的问题
wpf
wqq10274 天前
WPF 图标原地旋转
wpf
续亮~4 天前
基于Redis实现RAG架构的技术解析与实践指南
java·redis·架构·wpf·springai·文档检索