Logging/Traces in NetCore projects with Serilog

imageBuenas,

Como en cualquier desarrollo, un buen sistema de Logging o Trazas para diagnósticos y detección de problemas, es una buena práctica que va a salvarnos de un aprieto más de una vez. En La mayoría de los casos, creamos un ApplicationBlock, un Helper, o similar para trabajar con un sistema de estas características, cuyo objetivo es escribir trazas en un repositorio: Consola, fichero y/o base de datos entre otros, con la intención de poder consultarlo a posteriori, ante cualquier problema, que como sabemos, siempre recurrimos a el en entornos Productivos.

Con NetCore, podemos hacer lo mismo como no podía ser de otra manera, si bien, una peculiaridad y gran ventaja, es la posibilidad de usar el Interfaz ILogger (Microsoft.Extensions.Logging), tanto en nuestro controladores como en nuestros servicios o cualquier clase, mediante Injección de dependencias, lo que nos permitirá codificar sin pensar el framework o factoría encargada de escribir trazas en un repositorio: consola, fichero, base de datos, etc.

Existen muchos frameworks, que nos permiten llevar a cabo esta tarea de manera muy facil: Serilog, NLog y Log4Net, entre otros. ¡Atrás quedo Enterprise Libray  ! Cada uno tiene sus particularidades, si bien, Serilog, es considerado como uno de los mejores, además, cuenta con un elevado número de extensiones para el guardo de trazas en diferentes repositorios: consola, fichero, RollingFile, base de datos, Azure ApplicationInsight, Azure App Service, etc., lo que lo hacen aun más potente.

Por tanto, veamos como trabajar con Serilog:

Por ejemplo, podríamos tener el siguiente código en nuestro Controller:

Donde “_logger”, dejará dos trazas en nuestro/s repositorio/s.  Podríamos codificar de esta misma forma todas aquellas de nuestras clases: Servicios, Repositories, etc., sin preocupación adicional, por el momento.

A continuación, en el fichero Program.cs, incluiremos la siguiente configuración:

Como buena práctica, dejaremos en manos del fichero “appSettings.json”, la configuración de el/los repositorio/s.

Otra ventaja de Serilog, como puede verse en el código anterior, es la capacidad de ejecución en modo “asíncrono”. Es decir, la escritura de trazas en un hilo adicional para no afectar a la ejecución normal del programa.

ver-github

Y ahora, veamos todo esto en ejecución:

Referencias:

Un saludo & Happy Logging
Juanlu

 

Blazor 0.3.0/0.4.0-preview1-10286 ready!

image

El pasado 2 de mayo Blazor aparecía con su versión 0.3.0, y hoy, ya tenemos la versión 0.4.0-preview1-10286 lista para ser probada. Como ya sabemos, (según post anterior) al tratarse de un proyecto experimental requiere cambios constantes en nuestros proyectos (aun no recomendados para entornos de Producción).

Estos cambios, por tanto, nos obligan a realizar modificaciones en nuestra aplicación Taskin, que ya vimos en el post anterior (“¿Javascript ha muerto? .NET Web Assembly con Blazor”).

Según la release 0.3.0 e incluso para la 0.4.0-preview1, estas son las novedades:

    1. Project templates updated to use Bootstrap 4
    2. Async event handlers
    3. New component lifecycle events: OnAfterRender / OnAfterRenderAsync
    4. Component and element refs
    5. Better encapsulation of component parameters
    6. Simplified layouts

Y para hacer el Upgrade de 0.2.0 a 0.3.0:

  1. Instalar .NET Core 2.1 SDK (2.1.300-preview2-008533 o superior).
  2. instalar Visual Studio 2017 (15.7 Preview 5 or superior) con ASP.NET and web development workload selected.
  3. Instalar la última versión de la extensión “Blazor Language Services” del Marketplace de Visual Studio
  4. Actualizar el paquete Blazor y la Tool CLI a 0.3.0.
  5. Eliminar cualquier referencia al paquete: “Microsoft.AspNetCore.Razor.Design” asi como cualquier dependendencia.
  6. Actaulizar los proyectos a C# 7.3.
  7. Actualizar los parámetros usado en os componentes para que incluyan el atributo [Parameter].
  8. Actualizar los layouts para que hereden de “BlazorLayoutComponent” y eliminar la implementación de ILayoutComponent incluso la propiedad Body.

Tras la actualización, a continuación podemos una muestra de ello:

image

Y aquí, el código en Github: https://github.com/juanluelguerre/Taskin

Un saludo and happy Blazor coding
Juanlu

Nuevas Características C# 7.1

cs71_featuresBuenas,

Siguiendo con las características de C#, en este post continuaremos con nuestro Tour y veremos concretamente las de C# 7.1:

  • Async Main Method
  • Default Literal Expressions
  • Inferred Tuple Element Names

ver-github

¡Recordemos que aquí tenemos los links a todos los post sobre las características de C# desde su versión 6.0: https://elguerre.com/2017/12/14/y-ms-new-features-c-7-0-2-2/!

Enjoy your coding !
Juanlu

Referencia: https://docs.microsoft.com/es-es/dotnet/csharp/whats-new/csharp-7-1

Y más… New features C# 7.0 (2/2)

imageHola,

Una vez más, continuamos conociendo más características de C# 7.0. En esta ocasión, las cinco restantes a las que ya vimos en el post anterior. Las conoceremos a través del siguiente vídeo:

Ver vídeo Youtube

Local Functions
More expression-bodied members
throw Expresions
Generalized async return types
Numeric literal syntax improve-ments

Y como viene siendo habitual, aquí tenemos el código para “cacharrear” todo cuanto queramos sobre estas nuevas características.

Resultado de imagen de github logos resources

Referencias:
Características de C# 6.0 Parte 1
Características de C# 6.0 Parte 2
Características de C# 7.0 Parte 1
– https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7

Saludos & happy coding in C#
Juanlu

Continuamos: New features C# 7.0 !

FeaturesCShar7-Parte1

Hola,

Continuamos conociendo características nuevas de C#, concretamente,  las de 7.0 y en profundidad, las cinco primeras de ellas en esta ocasión.

Como en post anteriores las veremos a través de un Video Tip (Video tutorial) que podemos encontrar en mi canal de Youtube: https://www.youtube.com/user/JuanluElguerre .

Imagen relacionada

En este pequeño vídeo mostraremos las siguientes características:

Out Variables
Tuples
Discards
Pattern Matching
ref Locals and Return

Resultado de imagen de github logos resourcesResultado de imagen de github logos resources


Referencias:
– Características de C# 6.0 Parte 1
– Características de C# 6.0 Parte 2
https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-7

Un saludo and happy improving your coding with C#
Juanlu

 

TIP: C#6 New Features 2/2

imageHola,

Continuando con las nuevas características que incorpora C# 6.0,  he aquí un nuevo Video TIP / Tutorial con el resumen de las siguientes y últimas 4 de ellas:  https://youtu.be/v5DJ7drAwr0.

  • Autoproperties
  • Expresion Bodied Members
  • Collectoin Initializers
  • Exception Filters

Si aun no has visto el detalle con las cuatro características anteriores, aquí las tienes: https://elguerre.com/2017/10/02/tip-c6-new-features-12/

Como siempre, el código de ejemplo, en Github, para que puedas descargarlo y hacer las pruebas que consideres para explotarlas: https://github.com/juanluelguerre/Demos/tree/develop/CSFeatures/CS6/CS6

Un saludo & happy new Features Winking smile
Juanlu

TIP: C#6 New Features 1/2

imageHola,

En esta ocasión y tras una carrera de unos 7km, es el momento de publicar el Video TIP sobre las nuevas características de C#6. Aunque el objetivo era contar las de C#7, 7.1 y las de 8.0 Preview, he optado por bajar hasta C# 6.0 para ir contando todas ellas, con pequeños ejemplos, con el fin de aclarar un poco más todo este conjunto de nuevas versiones y características de C#.

Como vengo haciendo últimamente, he aquí un pequeño Video TIP / Tutorial que hace un resumen por las primeras 4 de ellas: https://youtu.be/pX6ccnnLzH8

  • “nameof”
  • Using Static
  • String Interpolation
  • Safe Navegation (NULL Conditional operator)

El código de ejemplo, en Github, para que puedas descargártelo y hacer tus propias pruebas: https://github.com/juanluelguerre/Demos/tree/develop/CSFeatures/CS6/CS6

Un saludo & happy new Features Winking smile
Juanlu