Logger for Windows 10 UWP应用程序

Ras*_*iya 22 logging win-universal-app windows-10 uwp

我找不到Windows 10通用应用程序的任何记录器,我已经尝试过log4net,Microsoft企业库,Nlog但是在Windows 10 Universal平台上都没有支持它们.

谁能建议我为Windows 10 UWP做好记录器?

小智 21

你试过MetroLog吗?您可以使用NuGet安装它:

Install-Package MetroLog
Run Code Online (Sandbox Code Playgroud)

这是一个简单的例子:

using MetroLog;
using MetroLog.Targets;

LogManagerFactory.DefaultConfiguration.AddTarget(LogLevel.Trace, LogLevel.Fatal, new FileStreamingTarget());

ILogger log = LogManagerFactory.DefaultLogManager.GetLogger<MainPage>();

log.Trace("This is a trace message.");
Run Code Online (Sandbox Code Playgroud)

您可以在http://talkitbr.com/2015/06/11/adicionando-logs-em-universal-apps找到解释如何将其添加到项目中的教程.还有关于检索这些日志的解释.

  • 与此同时,`FileStreamingTarget`已经过时了.建议使用`StreamingFileTarget`. (3认同)

Mov*_*GP0 14

Serilog

一种可能性是使用Serilog作为中央日志记录接口,并将其配置为具有与UWP一起使用的接收器.

您可以使用可供选择的众多接收器之一,但您也可以通过实现自定义接收器来选择使用自己的日志记录基础结构.

为了使它更有用,您可以使用Anotar.Serilog.Fody来使用Fody Code Weaver并使用Aspects使您的日志记录变得微不足道.

通常,您希望使用应用程序生命周期管理(ALM)的中央日志记录提供程序,以及本地接收器(文件)作为致命错误的后备.

METROLOG

MetroLog是ETW和LocalState之上的简单日志记录基础结构.这是快速且易于实现的,但它不能帮助您使用ALM,因为不支持集中式日志记录.

UWP记录

通用Windows Plattform日志记录相对较新,仅适用于Windows 10和Windows Server 2016.您可以选择ETW和LocalStorage.它为您提供了关于日志应如何显示的最低级别控制,但自然也导致了大部分工作的实现,也缺乏ALM功能.

有用的网址


Mar*_*ski 7

如果您想记录到文件并利用 Microsoft 的轻量级 DI 框架,您可以使用 Serilog。

在 Nuget 包管理器控制台中输入以下内容:

Install-Package Microsoft.Extensions.DependencyInjection
Install-Package Microsoft.Extensions.Logging
Install-Package Serilog.Extensions.Logging.File
Run Code Online (Sandbox Code Playgroud)

在组合根设置依赖注入容器。在我们的例子中,它是 App.xaml.cs 文件中的 OnLaunched 方法。

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Windows.Storage;
...

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
     ...
    // Create IOC container and add logging feature to it.
    IServiceCollection services = new ServiceCollection();
    services.AddLogging();

    // Build provider to access the logging service.
    IServiceProvider provider = services.BuildServiceProvider();

    // UWP is very restrictive of where you can save files on the disk.
    // The preferred place to do that is app's local folder.
    StorageFolder folder = ApplicationData.Current.LocalFolder;
    string fullPath = $"{folder.Path}\\Logs\\App.log";

    // Tell the logging service to use Serilog.File extension.
    provider.GetService<ILoggerFactory>().AddFile(fullPath);
    ...
}
Run Code Online (Sandbox Code Playgroud)

设置后,日志记录非常简单。只需将记录器注入您的课程即可。

using Microsoft.Extensions.Logging;

class MyClass
{
    readonly ILogger<MyClass> logger;

    public MyClass(ILogger<MyClass> logger)
    {
        this.logger = logger;
        logger.LogInformation("Hello from MyClass.");
    }
}
Run Code Online (Sandbox Code Playgroud)

您的日志文件应在以下位置创建:

C:\Users\yourUserName\AppData\Local\Packages\f15fdadf-faae-4f4a-8445-5feb195ff692_68newbw0j54vy\LocalState\Logs\App-20171206.log,

其中 f15fdadf-faae-4f4a-8445-5feb195ff692_68newbw0j54vy 是我的解决方案中 Package.appxmanifest 文件中的包名。

请注意 AppData 文件夹默认隐藏在文件资源管理器中。

这是它的内容:

2017-12-06T17:06:33.1358005-06:00  [INF] Hello from MyClass. (25278b08)
Run Code Online (Sandbox Code Playgroud)