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

 

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

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

[GIFTip] Excepciones personalizadas sin escribir código

Hola,

Ahora que voy cogiendo ritmo con los Tips y  VídeoTips que podemos ver en mi canal de youtube (https://www.youtube.com/user/JuanluElguerre), ¿Por qué no dar paso a los GIFTips? Creo que es una gran idea para aquellos posts en los que hay poco que decir y mucho que contar.

¡Seguro que ahora no paso por alto el escribir algún que otro post!

Gracias a Visual Studio, cada vez escribimos menos código. En esta imagen GIF podemos ver un ejemplo de crear una nueva clase personalizada para nuestras excepciones.

CreationCustomExceptions

¡Expero que sea de utilizad!

Un saludo
Juanlu

[Video Tip]Análisis estático con Sonar Lint y servidor privado Sonar en Azure App Service (Linux)

Muy buenas,

En esta ocasión veremos como realizar el análisis estático de nuestro código y como sacar mayor partido haciendo uso de Sonar como servidor, aunque también veremos que no es realmente necesario.

¿Quieres ver un vídeo explicativo a modo de DEMO? Si es así, puedes acceder directamente a partir de este enlace. En caso contrario, sigue leyendo para leer brevemente un resumen.

Sin usar un servidor sonar.

Para llevar a cabo el análisis estático de código en nuestra solución seguiremos los siguientes pasos:

1.- Añadir el paquete NuGet: SonarAnalyzer.CSharp.

image

2.- Incluir en nuestra solución un fichero Demo.RuleSet.

3.- Configurar las reglas, tanto las específicas de Microsoft, como hasta ahora hacemos en nuestros proyectos, así como las nuevas añadidas por sonar, que distinguiremos fácilmente dado que tienen la nomenclatura “Snnnn”.

image

4.- Finalmente, recompilar para analizar y posteriormente revisar el código.

image

Usando un servidor Sonar.

1.- Instalar la extensión “SonarLint for Visual Studio 2017”.

image

2.- Abrir la solución y realizar la conexión con el servidor Sonar.

image

3.- Tras la conexión, vincularemos la solución a proyecto Sonar previamente creado desde el propio servidor.

4.- Finalmente, el fichero de reglas “.ruleset”, se creará automáticamente.

image

5.- Al igual que para el caso anterior (sin servidor), configurar las reglas y compilar para comenzar a analizar y revisar el código.

Happy testing!

Un saludo
Juanlu, ElGuerre