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端的日志输出,并可以根据需要选择显示的日志级别。有助于开发人员可以实时关注程序的运行流程。

相关推荐
Macbethad3 小时前
工业设备数据记录程序技术方案
wpf·信息与通信
zzyzxb16 小时前
WPF 中隧道事件和冒泡事件
wpf
闲人编程16 小时前
API限流、鉴权与监控
分布式·python·wpf·限流·集群·令牌·codecapsule
TA远方18 小时前
【WPF】桌面程序使用谷歌浏览器内核CefSharp控件详解
wpf·浏览器·chromium·控件·cefsharp·cefsharp.wpf
Macbethad1 天前
工业设备数据采集主站程序技术方案
wpf
关关长语2 天前
HandyControl 3.5.x 版本 ListViewItem不显示问题
windows·wpf
Macbethad2 天前
工业设备维护程序技术方案
wpf
Macbethad2 天前
工业设备配方管理系统技术方案
wpf
喵叔哟2 天前
7.日志系统深入
wpf
清风徐来Groot2 天前
WPF布局之Grid
wpf