En esta guía veremos como registrar logs en archivos txt, de forma manual.
Existen herramientas de logging para .NET, como NLog o Serilog, pero no se abordarán en este documento, al menos por ahora.
En esta guía veremos como registrar logs en archivos txt, de forma manual.
Existen herramientas de logging para .NET, como NLog o Serilog, pero no se abordarán en este documento, al menos por ahora.
Dentro de un directorio destinado a métodos auxiliares (si no existe, creamos el directorio Helpers en la raíz del proyecto) agregamos una clase estática llamada LogMessages.
En esta clase que acabamos de crear, definiremos los métodos necesarios para registrar diferentes tipos de logs.
A modo de ejemplo, definiremos los siguienter dos métodos:Creamos un método estático void, que recibe como parámetros:
using Newtonsoft.Json;
using System.Text.RegularExpressions;
namespace MiApiNetCore.Helpers
{
public static class LogMessages
{
public static void GrabarLogError(string metodo, string repositorio, Exception exception)
{
try
{
string innerEx = "";
// Busco inner exception:
if (exception.InnerException != null)
{
innerEx = $" - {exception.InnerException.Message}";
}
//Busco la posición del error:
string posicionError;
Match match = Regex.Match(exception.StackTrace, @"line (\d+)");
if (match.Success)
{
posicionError = match.Groups[0].Value;
}
else
{
posicionError = "-";
}
//Seteo el nombre y la ubicación del archivo:
var fecha = DateTime.UtcNow;
var fecha1 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, (TimeZoneInfo.FindSystemTimeZoneById("Argentina Standard Time")));
string fileName = $"errores{fecha.Year}-{fecha.Month}-{fecha.Day}.txt";
string path = "C:\\MiApiNetCore";
//Grabo el contenido en el archivo de logs:
if (!String.IsNullOrEmpty(path))
{
if (!Directory.Exists(path))
{
DirectoryInfo di = Directory.CreateDirectory(path);
}
if (path.Substring(path.Length - 1, 1) != "\\")
{
path += "\\";
}
string txtFile = path + fileName;
string[] lineas = {$"FECHA: {fecha1}",
$"REPOSITORIO: {repositorio}",
$"MÉTODO: {metodo}",
$"ERROR: {exception.Message} {innerEx}",
$"POSICIÓN: {posicionError}",
"------------------------------------------------"};
File.AppendAllLines(txtFile, lineas);
}
}
catch (Exception ex)
{
return;
}
}
}
}
Creamos un método estático void, que recibe como parámetros:
using Newtonsoft.Json;
using System.Text.RegularExpressions;
namespace MiApiNetCore.Helpers
{
public static class LogMessages
{
public static void GrabarLogSolicitud(string metodo, string controlador, object solicitud, object respuesta)
{
try
{
// Convierto los objetos de solicitud y respuesta en String con formato JSON:
string jsonSolicitud = JsonConvert.SerializeObject(solicitud);
string jsonRespuesta = JsonConvert.SerializeObject(respuesta);
var fecha = DateTime.UtcNow;
var fecha1 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, (TimeZoneInfo.FindSystemTimeZoneById("Argentina Standard Time")));
// Defino el nombre del archivo txt donde voy a grardar los logs de errores:
string fileName = $"solicitudes{fecha.Year}-{fecha.Month}-{fecha.Day}.txt";
// Establezco la ruta del archivo txt:
string path = "C:\\MiApiNetCore";
if (!String.IsNullOrEmpty(path))
{
// Si aún no existe, creo el directorio:
if (!Directory.Exists(path))
{
DirectoryInfo di = Directory.CreateDirectory(path);
}
// Establezco la ruta completa del archivo:
if (path.Substring(path.Length - 1, 1) != "\\")
{
path += "\\";
}
string txtFile = path + fileName;
// Defino el contenido del log:
string[] lineas = {$"FECHA: {fecha1}",
$"CONTROLADOR: {controlador}",
$"MÉTODO: {metodo}",
$"SOLICITUD: {jsonSolicitud}",
$"RESPUESTA: {jsonRespuesta}",
"------------------------------------------------"};
// Grabo el contenido del log en el archivo txtFile:
File.AppendAllLines(txtFile, lineas);
}
}
catch (Exception ex)
{
return;
}
}
}
}
En construcción...