logging windows-10 win-universal-app uwp

logging - Logger para la aplicación UWP de Windows 10



navigation view uwp (5)

Serilog

Una posibilidad es usar Serilog como una interfaz de registro central y configurarlo para que tenga un receptor que funcione con UWP.

Puede usar uno de los muchos sumideros de los que puede elegir , pero también puede optar por usar su propia infraestructura de registro mediante la implementación de un sumidero personalizado.

Para hacerlo aún más útil, puedes usar Anotar.Serilog.Fody para usar el Fody Code Weaver y usar Aspects para hacer que tu registro sea trivial.

Normalmente, desea utilizar un proveedor de registro central para Application Lifecycle Management (ALM), así como un sumidero local (Archivo) como reserva para errores fatales.

MetroLog

MetroLog es una infraestructura de registro simple encima de ETW y LocalState. Esto es rápido y fácil de implementar, pero no le ayuda con ALM, ya que no se admite el registro centralizado.

UWP logging

El registro universal de Windows Plattform es relativamente nuevo y solo es posible con Windows 10 y Windows Server 2016. Puede elegir entre ETW y LocalStorage. Le proporciona la mayor parte del control de bajo nivel sobre el aspecto que debería tener su registro, pero, naturalmente, también hace que la mayoría del trabajo se implemente y también carece de capacidades de ALM.

Enlaces Útiles

No pude encontrar ningún registrador para la aplicación universal de Windows 10, he probado log4net, la biblioteca empresarial de Microsoft, Nlog pero ninguno de ellos es compatible con la plataforma universal de Windows 10.

¿Alguien puede sugerirme un buen registrador para Windows 10 UWP?


¿Has probado MetroLog? Puedes instalarlo usando NuGet:

Install-Package MetroLog

Aquí hay un ejemplo rápido:

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.");

Puede encontrar un tutorial que explica cómo agregarlo a su proyecto en http://talkitbr.com/2015/06/11/adicionando-logs-em-universal-apps . También hay una explicación con respecto a la recuperación de estos registros.


La única solución que conozco es usar las API en el espacio de nombres de windows.foundation.diagnostics para realizar el rastreo de ETW.

Y Microsoft ha proporcionado una muestra here .


Puede utilizar el receptor de archivos rodante Serilog estándar en UWP, solo necesita decirle al registrador dónde debe iniciar sesión. Aquí hay un código para configurarlo (estoy usando Autofac);

private static void RegisterLogger(ContainerBuilder builder) { const string fileOutputTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}] {Message}{NewLine}{Exception}"; var logPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "Logs", "MyAppName-{Date}.log"); var logConfiguration = new LoggerConfiguration() .MinimumLevel.Verbose() .WriteTo.RollingFile(logPath, outputTemplate: fileOutputTemplate); Log.Logger = logConfiguration.CreateLogger(); builder.RegisterLogger(); }

`` `


Si desea iniciar sesión en un archivo y aprovechar el marco DI ligero de Microsoft, puede usar Serilog.

En la consola de Nuget Package Manager ingrese lo siguiente:

Install-Package Microsoft.Extensions.DependencyInjection Install-Package Microsoft.Extensions.Logging Install-Package Serilog.Extensions.Logging.File

Configurar el contenedor de inyección de dependencia en la raíz de la composición. En nuestro caso, es el método OnLaunched en el archivo App.xaml.cs.

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); ... }

Una vez configurado, el registro es muy simple. Simplemente inyecte el registrador en su clase.

using Microsoft.Extensions.Logging; class MyClass { readonly ILogger<MyClass> logger; public MyClass(ILogger<MyClass> logger) { this.logger = logger; logger.LogInformation("Hello from MyClass."); } }

Su archivo de registro debe ser creado en:

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

donde f15fdadf-faae-4f4a-8445-5feb195ff692_68newbw0j54vy es el nombre del paquete del archivo Package.appxmanifest en mi solución.

Tenga en cuenta que la carpeta AppData está oculta en el Explorador de archivos de forma predeterminada.

Y aquí está su contenido:

2017-12-06T17:06:33.1358005-06:00 [INF] Hello from MyClass. (25278b08)