如何将Wpf结合NLog日志输出至LogViewer实现高效日志管理?

摘要:1 LogViewer LogViewer是通过UDP传输的高性能实时log查看器。 具有一下特性: 通过UDP读取日志 通过文件导入日志 导出日志到一个文件中 排序、过滤(日志树,日志等级)和查找 突出显示搜索文本 从UPD接收日志时忽略
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端的日志输出,并可以根据需要选择显示的日志级别。有助于开发人员可以实时关注程序的运行流程。