Пример #1
0
        /// <summary>
        /// Registra un mensaje con un nivel de importancia en el flujo del método actual.
        /// Requiere que el inicio y el retorno del método esté logeado.
        /// </summary>
        /// <example>
        ///     public class UsuarioBO
        ///     {
        ///         private UsuarioDAO dao = new UsuarioDAO();
        ///
        ///         public void Agregar(UsuarioTO usuario)
        ///         {
        ///             log.Mensaje("Antes de llamar al DAO", Nivel.INFO);
        ///             dao.Agregar(usuario);
        ///             log.Mensaje("Luego de llamar al DAO", Nivel.INFO);
        ///         }
        ///     }
        /// </example>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="mensaje">Mensaje a registrar.</param>
        /// <param name="nivel">Nivel de importancia o tipo del mensaje.</param>
        public void Mensaje(string mensaje, Nivel nivel)
        {
            Llamada++;

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID  = Log4MeManager.ThreadGUID,
                MethodGUID  = InstanciaLog.MethodGUID,
                Namespace   = InstanciaLog.Metodo.DeclaringType.Namespace,
                Clase       = InstanciaLog.Metodo.DeclaringType.Name,
                Metodo      = InstanciaLog.Metodo.ToString(),
                Mensaje     = mensaje,
                Nivel       = nivel,
                Correlativo = Llamada,
                Tipo        = Tipo.Mensaje
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteNivel(nivel))
                {
                    writer.Guardar(registro);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Registra el fin de la ejecución de un método, guardando la fecha de termino, el valor de retorno y su tipo.
        /// Se debe logear antes de retornar. Requiere que se haya logeado el inicio del método.
        /// </summary>
        /// <example>
        ///     public int Sumar(int valor1, int valor2)
        ///     {
        ///         log.Inicio(valor1, valor2);
        ///         int resultado = valor1 + valor2;
        ///         log.Retorno(resultado);
        ///         return resultado;
        ///     }
        /// </example>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="valor">Valor de retorno del método.</param>
        public void Retorno(object valor)
        {
            Llamada++;

            string valorJson = string.Empty;

            try
            {
                valorJson = JsonConverterFactory.ObtenerJsonConverter().ToJson(valor, true);
            }
            catch (Exception e)
            {
                valorJson = "Error al transformar a Json - " + e.Message;
            }

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID    = Log4MeManager.ThreadGUID,
                MethodGUID    = InstanciaLog.MethodGUID,
                Namespace     = InstanciaLog.Metodo.DeclaringType.Namespace,
                Clase         = InstanciaLog.Metodo.DeclaringType.Name,
                Metodo        = InstanciaLog.Metodo.ToString(),
                ValorVariable = valorJson,
                Correlativo   = Llamada,
                Tipo          = Tipo.Retorno
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteTipo(Tipo.Retorno))
                {
                    writer.Guardar(registro);
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Carga una colección de registros (fieles al txt) mediante un filtro, a una representación de cada parte del flujo.
        /// </summary>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="retorno">Representación completa del flujo, para cargar los datos leídos.</param>
        /// <param name="x">Fila inicial a leer. Luego se continúa hasta el final.</param>
        /// <param name="registros">Registros fieles el archivo plano (Origen de la información).</param>
        /// <param name="filtro">Filtro para excluir elementos. <value>true</value> para incluir, <value>false</value> para excluir.</param>
        /// <returns>Representación completa del flujo</returns>
        private MetodoTO CargarArbol(MetodoTO retorno, ref int x, IList <RegistroInLineTO> registros, Func <RegistroInLineTO, bool> filtro = null)
        {
            while (x < registros.Count)
            {
                RegistroInLineTO registro = registros[x];

                if (filtro == null || (filtro != null && filtro(registro)))
                {
                    if (registro.Tipo == "Inicio")
                    {
                        if (retorno.Nombre != null)
                        {
                            retorno.Llamadas.Add(CargarArbol(new MetodoTO(), ref x, registros));
                        }
                        else
                        {
                            retorno.Nombre     = registro.Metodo;
                            retorno.Clase      = registro.Clase;
                            retorno.MethodGUID = registro.MethodGUID;
                            retorno.Fecha      = registro.Fecha;
                        }
                    }
                    else if (registro.Tipo == "Retorno")
                    {
                        retorno.Retorno = new RetornoTO()
                        {
                            Fecha = registro.Fecha,
                            Tipo  = registro.TipoVariable,
                            Valor = registro.ValorVariable
                        };

                        return(retorno);
                    }
                    else if (registro.Tipo == "Excepcion")
                    {
                        retorno.Excepcion = new ExcepcionTO()
                        {
                            Data       = registro.Data,
                            Mensaje    = registro.Mensaje,
                            StackTrace = registro.StackTrace,
                            Tipo       = registro.NombreVariable,
                        };
                    }
                    else if (registro.Tipo == "Parametro")
                    {
                        retorno.Parametros.Add(new ParametroTO()
                        {
                            Nombre = registro.NombreVariable,
                            Tipo   = registro.TipoVariable,
                            Valor  = registro.ValorVariable
                        });
                    }
                }
                x++;
            }

            return(null);
        }
        protected override void Agregar(RegistroInLineTO registro)
        {
            if (Log == null)
            {
                Log = LogManager.GetLogger(Type.GetType(registro.Clase));
            }

            Log.Debug(Formatear(registro));
        }
Пример #5
0
        protected override void Agregar(RegistroInLineTO registro)
        {
            string salida = Formatear(registro);

            NivelTrace   nivel = null;
            TraceTypeTag tipo  = null;

            if (NivelesSeguimiento != null)
            {
                if (registro.Tipo == Tipo.Mensaje)
                {
                    tipo = NivelesSeguimiento.FirstOrDefault(c => c.Nombre == Tipo.Mensaje && c.Nivel != null && c.Nivel == registro.Nivel);

                    if (tipo == null)
                    {
                        tipo = NivelesSeguimiento.FirstOrDefault(c => c.Nombre == Tipo.Mensaje && c._Nivel == "*");
                    }
                }

                if (tipo == null)
                {
                    tipo = NivelesSeguimiento.FirstOrDefault(c => c._Nombre.Equals("*", StringComparison.InvariantCultureIgnoreCase));
                }
            }

            if (tipo != null)
            {
                nivel = tipo.NivelTrace;
            }

            if (nivel == NivelTrace.DEBUG)
            {
                Trace.WriteLine(salida);
            }
            if (nivel == NivelTrace.INFO)
            {
                Trace.TraceInformation(salida);
            }
            if (nivel == NivelTrace.ERROR)
            {
                Trace.TraceError(salida);
            }
            if (nivel == NivelTrace.WARN)
            {
                Trace.TraceWarning(salida);
            }
            if (nivel == NivelTrace.FAIL)
            {
                Trace.Fail(salida);
            }
        }
Пример #6
0
        /// <summary>
        /// Persiste el registro.
        /// </summary>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 27/06/2016 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="registro">Registro unificado a ser escrito.</param>
        public void Guardar(RegistroInLineTO registro)
        {
            if (!inicializado)
            {
                Inicializar();
                inicializado = true;
            }

            if (!SaltarGuardadoFormato && !parametrosAgregados)
            {
                AgregarParametros();
                parametrosAgregados = true;
            }

            Agregar(registro);
        }
Пример #7
0
        protected override void Agregar(RegistroInLineTO registro)
        {
            if (Tipo == null)
            {
                Tipo = Tipo.Entity;
            }

            if (Tipo == Tipo.Entity)
            {
                Salida += Formatear(registro) + "\r\n";
            }
            else if (Tipo == Tipo.Entity)
            {
                Registros.Add(registro);
            }
        }
Пример #8
0
        /// <summary>
        /// Registra la información relevante de una excepción lanzada por un método. Se debe logear antes de ser lanzada.
        /// Requiere que el inicio y el retorno del método esté logeado.
        /// </summary>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="excepcion">Excepción lanzada.</param>
        /// <param name="permiteContinuar">Valor que indica si la excepción interrumpe el flujo (no permite continuar).
        /// En caso de ser falso, se logea automáticamente el retorno del método como Excepción.</param>
        public void Excepcion(Exception excepcion, bool permiteContinuar)
        {
            Llamada++;

            string valorJson = string.Empty;

            try
            {
                valorJson = JsonConverterFactory.ObtenerJsonConverter().ToJson(excepcion.Data, true);
            }
            catch (Exception ex)
            {
                valorJson = "Error al transformar a Json - " + ex.Message;
            }

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID    = Log4MeManager.ThreadGUID,
                MethodGUID    = InstanciaLog.MethodGUID,
                Namespace     = InstanciaLog.Metodo.DeclaringType.Namespace,
                Clase         = InstanciaLog.Metodo.DeclaringType.Name,
                Metodo        = InstanciaLog.Metodo.ToString(),
                StackTrace    = excepcion.StackTrace,
                Data          = valorJson,
                TipoExcepcion = excepcion.GetType().FullName,
                Mensaje       = excepcion.Message,
                Correlativo   = Llamada,
                Tipo          = Tipo.Excepcion
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteTipo(Tipo.Excepcion))
                {
                    writer.Guardar(registro);
                }
            }

            if (!permiteContinuar)
            {
                Retorno("<" + registro.Tipo + ">");
            }
        }
Пример #9
0
        protected override void Agregar(RegistroInLineTO registro)
        {
            string salida = Formatear(registro);

            ConsoleColor colorTexto = ConsoleColor.White;
            ConsoleColor colorFondo = ConsoleColor.Black;

            if (NivelesSeguimiento != null)
            {
                ConsoleTypeTag tipo = null;

                if (registro.Tipo == Tipo.Mensaje)
                {
                    tipo = NivelesSeguimiento.FirstOrDefault(c => c.Nombre == Tipo.Mensaje && c.Nivel != null && c.Nivel == registro.Nivel);

                    if (tipo == null)
                    {
                        tipo = NivelesSeguimiento.FirstOrDefault(c => c.Nombre == Tipo.Mensaje && c._Nivel == "*");
                    }
                }

                if (tipo == null)
                {
                    tipo = NivelesSeguimiento.FirstOrDefault(c => c._Nombre.Equals("*", StringComparison.InvariantCultureIgnoreCase));
                }

                if (tipo != null)
                {
                    if (!string.IsNullOrEmpty(tipo.ColorTexto))
                    {
                        colorTexto = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), tipo.ColorTexto);
                    }

                    if (!string.IsNullOrEmpty(tipo.ColorFondo))
                    {
                        colorFondo = (ConsoleColor)Enum.Parse(typeof(ConsoleColor), tipo.ColorFondo);
                    }
                }
            }

            Print(salida, colorFondo, colorTexto);
        }
Пример #10
0
        /// <summary>
        /// Registra el fin de la ejecución de un método, guardando la fecha de termino, el valor de retorno y su tipo.
        /// Se debe logear antes de retornar. Requiere que se haya logeado el inicio del método.
        /// </summary>
        /// <example>
        ///     public int Sumar(int valor1, int valor2)
        ///     {
        ///         log.Inicio(valor1, valor2);
        ///         int resultado = valor1 + valor2;
        ///         log.Retorno(resultado);
        ///         return resultado;
        ///     }
        /// </example>
        /// <remarks>
        ///     <para>
        ///         <h2 class="groupheader">Registro de versiones</h2>
        ///         <ul>
        ///             <li>1.0.0</li>
        ///             <table>
        ///                 <tr style="font-weight: bold;">
        ///                     <td>Autor</td>
        ///                     <td>Fecha</td>
        ///                     <td>Descripción</td>
        ///                 </tr>
        ///                 <tr>
        ///                     <td>Marcos Abraham Hernández Bravo.</td>
        ///                     <td>11/11/2016</td>
        ///                     <td>Versión Inicial.</td>
        ///                 </tr>
        ///             </table>
        ///         </ul>
        ///     </para>
        /// </remarks>
        /// <param name="valor">Valor de retorno del método.</param>
        private void _Retorno(object valor = null)
        {
            Llamada++;

            if (valor == null)
            {
                valor = "<Void>";
            }

            string valorJson = string.Empty;

            try
            {
                valorJson = valor.ToJson(true);
            }
            catch (Exception e)
            {
                valorJson = "Error al transformar a Json - " + e.Message;
            }

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID    = ThreadGUID,
                MethodGUID    = _MethodGUID,
                Namespace     = Metodo.DeclaringType.Namespace,
                Clase         = Metodo.DeclaringType.Name,
                Metodo        = Metodo.ToString(),
                ValorVariable = valorJson,
                Correlativo   = Llamada,
                Tipo          = Tipo.Retorno
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteTipo(Tipo.Retorno))
                {
                    writer.Guardar(registro);
                }
            }
        }
        /// <summary>
        /// Logea el identifiador de ejecución del hilo actual. Es recomendable utilizar el RUN del usuario u otro valor que identifique la sesión actual.
        /// </summary>
        /// <remarks>
        ///     <para>
        ///         <h2 class="groupheader">Registro de versiones</h2>
        ///         <ul>
        ///             <li>1.0.0</li>
        ///             <table>
        ///                 <tr style="font-weight: bold;">
        ///                     <td>Autor</td>
        ///                     <td>Fecha</td>
        ///                     <td>Descripción</td>
        ///                 </tr>
        ///                 <tr>
        ///                     <td>Marcos Abraham Hernández Bravo.</td>
        ///                     <td>11/11/2016</td>
        ///                     <td>Versión Inicial.</td>
        ///                 </tr>
        ///             </table>
        ///         </ul>
        ///     </para>
        /// </remarks>
        /// <param name="identificador">Identificador del hilo.</param>
        public static void Identificador(string identificador)
        {
            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID = ThreadGUID,
                MethodGUID = Instancia != null ? Instancia._MethodGUID : null,
                Namespace  = Instancia != null ? Instancia.Metodo.DeclaringType.Namespace : null,
                Clase      = Instancia != null ? Instancia.Metodo.DeclaringType.FullName : null,
                Metodo     = Instancia != null?Instancia.Metodo.ToString() : null,
                                 Correlativo   = 0,
                                 Tipo          = Tipo.Identificador,
                                 ValorVariable = identificador
            };

            if (Configuration != null)
            {
                foreach (ALogWriter writer in Configuration.Writers)
                {
                    writer.Guardar(registro);
                }
            }
        }
        /// <summary>
        /// Carga una colección de registros (fieles al txt) mediante un filtro, a una representación de cada parte del flujo.
        /// </summary>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="retorno">Representación completa del flujo, para cargar los datos leídos.</param>
        /// <param name="indiceInicio">Fila inicial a leer. Luego se continúa hasta el final.</param>
        /// <param name="registros">Registros fieles el archivo plano (Origen de la información).</param>
        /// <param name="filtro">Filtro para excluir elementos. <value>true</value> para incluir, <value>false</value> para excluir.</param>
        /// <returns>Representación completa del flujo</returns>
        private MetodoTO CargarArbol(MetodoTO retorno, ref int indiceInicio, IList <RegistroInLineTO> registros, Func <RegistroInLineTO, bool> filtro = null)
        {
            for (int indice = indiceInicio; indice < registros.Count; indice++)
            {
                RegistroInLineTO registro = registros[indice];

                if (filtro == null || (filtro != null && filtro(registro)))
                {
                    if (registro.Tipo == Tipo.Inicio)
                    {
                        if (retorno.Inicio != null)
                        {
                            retorno.Llamadas.Add(CargarArbol(new MetodoTO(), ref indiceInicio, registros));
                        }
                        else
                        {
                            retorno.Inicio = new InicioTO()
                            {
                                Namespace  = registro.Namespace,
                                Clase      = registro.Clase,
                                Llamada    = registro.Correlativo,
                                Fecha      = registro.Fecha,
                                MethodGUID = registro.MethodGUID,
                                Metodo     = registro.Metodo,
                                ThreadGUID = registro.ThreadGUID
                            };

                            retorno.Namespace  = retorno.Inicio.Namespace;
                            retorno.Clase      = retorno.Inicio.Clase;
                            retorno.Llamada    = retorno.Inicio.Llamada;
                            retorno.Fecha      = retorno.Inicio.Fecha;
                            retorno.MethodGUID = retorno.Inicio.MethodGUID;
                            retorno.ThreadGUID = retorno.Inicio.ThreadGUID;
                            retorno.Metodo     = retorno.Inicio.Metodo;
                        }
                    }
                    else if (registro.Tipo == Tipo.Variable)
                    {
                        retorno.Variables.Add(new VariableTO()
                        {
                            Namespace  = retorno.Inicio.Namespace,
                            Clase      = retorno.Inicio.Clase,
                            Llamada    = retorno.Inicio.Llamada,
                            Fecha      = registro.Fecha,
                            MethodGUID = retorno.Inicio.MethodGUID,
                            ThreadGUID = retorno.Inicio.ThreadGUID,
                            Nombre     = registro.NombreVariable,
                            Valor      = registro.ValorVariable
                        });
                    }
                    else if (registro.Tipo == Tipo.Retorno)
                    {
                        retorno.Retorno = new RetornoTO()
                        {
                            Namespace  = retorno.Inicio.Namespace,
                            Clase      = retorno.Inicio.Clase,
                            Llamada    = retorno.Inicio.Llamada,
                            Fecha      = registro.Fecha,
                            MethodGUID = retorno.Inicio.MethodGUID,
                            ThreadGUID = retorno.Inicio.ThreadGUID,
                            Valor      = registro.ValorVariable
                        };

                        return(retorno);
                    }
                    else if (registro.Tipo == Tipo.Excepcion)
                    {
                        retorno.Excepciones.Add(new ExcepcionTO()
                        {
                            Namespace  = retorno.Inicio.Namespace,
                            Clase      = retorno.Inicio.Clase,
                            Llamada    = retorno.Inicio.Llamada,
                            Fecha      = registro.Fecha,
                            MethodGUID = retorno.Inicio.MethodGUID,
                            ThreadGUID = retorno.Inicio.ThreadGUID,
                            Data       = registro.Data,
                            Mensaje    = registro.Mensaje,
                            StackTrace = registro.StackTrace,
                            Tipo       = registro.NombreVariable,
                        });
                    }
                    else if (registro.Tipo == Tipo.Mensaje)
                    {
                        retorno.Mensajes.Add(new MensajeTO()
                        {
                            Namespace  = retorno.Inicio.Namespace,
                            Clase      = retorno.Inicio.Clase,
                            Llamada    = retorno.Inicio.Llamada,
                            Fecha      = registro.Fecha,
                            Nivel      = registro.Nivel,
                            MethodGUID = retorno.Inicio.MethodGUID,
                            ThreadGUID = retorno.Inicio.ThreadGUID,
                            Mensaje    = registro.Mensaje
                        });
                    }
                    else if (registro.Tipo == Tipo.Parametro)
                    {
                        retorno.Parametros.Add(new ParametroTO()
                        {
                            Namespace  = retorno.Inicio.Namespace,
                            Clase      = retorno.Inicio.Clase,
                            Llamada    = retorno.Inicio.Llamada,
                            Fecha      = registro.Fecha,
                            MethodGUID = retorno.Inicio.MethodGUID,
                            ThreadGUID = retorno.Inicio.ThreadGUID,
                            Nombre     = registro.NombreVariable,
                            Valor      = registro.ValorVariable
                        });
                    }
                }
            }

            return(null);
        }
Пример #13
0
        /// <summary>
        /// Registra el inicio de un método, guarda la hora actual y cada parametro especificando
        /// nombre, tipo y valor. Se recomienda que esta sea la primera instrucción de cada método.
        /// Si se logea el inicio, es obligatorio logear el retorno aunque el método sea Void.
        /// </summary>
        /// <example>
        ///     public void Metodo1(int a, string b, bool c)
        ///     {
        ///         log.Inicio(a, b, c);
        ///         log.Retorno();
        ///     }
        ///
        ///     public void Metodo2()
        ///     {
        ///         log.Inicio();
        ///         log.Retorno();
        ///     }
        /// </example>
        /// <remarks>
        ///     <para>
        ///         <h2 class="groupheader">Registro de versiones</h2>
        ///         <ul>
        ///             <li>1.0.0</li>
        ///             <table>
        ///                 <tr style="font-weight: bold;">
        ///                     <td>Autor</td>
        ///                     <td>Fecha</td>
        ///                     <td>Descripción</td>
        ///                 </tr>
        ///                 <tr>
        ///                     <td>Marcos Abraham Hernández Bravo.</td>
        ///                     <td>11/11/2016</td>
        ///                     <td>Versión Inicial.</td>
        ///                 </tr>
        ///             </table>
        ///         </ul>
        ///     </para>
        /// </remarks>
        /// <param name="parametros">Lista de parametros del método actual.</param>
        private void _Inicio(params object[] parametros)
        {
            Llamada++;

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID  = ThreadGUID,
                MethodGUID  = _MethodGUID,
                Namespace   = Metodo.DeclaringType.Namespace,
                Clase       = Metodo.DeclaringType.Name,
                Metodo      = Metodo.ToString(),
                Correlativo = Llamada,
                Tipo        = Tipo.Inicio
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteTipo(Tipo.Inicio))
                {
                    writer.Guardar(registro);
                }
            }

            int numParametro = 0;

            if (parametros != null && parametros.Length > 0)
            {
                foreach (ParameterInfo param in Metodo.GetParameters())
                {
                    Llamada++;
                    string valor = string.Empty;

                    try
                    {
                        valor = parametros[numParametro].ToJson(true);
                    }
                    catch (Exception e)
                    {
                        valor = "Error al transformar a Json - " + e.Message.Replace("\n", "\t");
                    }

                    RegistroInLineTO parametro = new RegistroInLineTO()
                    {
                        ThreadGUID     = ThreadGUID,
                        MethodGUID     = _MethodGUID,
                        Namespace      = Metodo.DeclaringType.Namespace,
                        Clase          = Metodo.DeclaringType.Name,
                        Metodo         = Metodo.ToString(),
                        NombreVariable = param.Name,
                        ValorVariable  = valor,
                        Correlativo    = Llamada,
                        Tipo           = Tipo.Parametro
                    };

                    foreach (ALogWriter writer in Writers)
                    {
                        if (writer.PermiteTipo(Tipo.Parametro))
                        {
                            writer.Guardar(parametro);
                        }
                    }
                    numParametro++;
                }
            }
        }
Пример #14
0
        /// <summary>
        /// Formatea un registro en una cadena de texto.
        /// </summary>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 10/04/2016 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="registro">Registro unificado.</param>
        /// <returns>Cadena de texto formateada.</returns>
        public virtual string Formatear(RegistroInLineTO registro)
        {
            if (FormatoSalida == null)
            {
                FormatoSalida = FormatoPredeterminado;
            }
            if (SeparadorSalida == 0)
            {
                SeparadorSalida = SeparadorPredeterminado;
            }
            if (!FormatoSalida.EndsWith(SeparadorSalida.ToString()) && !FormatoSalida.Equals(string.Empty))
            {
                FormatoSalida += SeparadorSalida;
            }

            if (FormatoSalida == FormatoPredeterminado + SeparadorSalida)
            {
                FormatoSalida = string.Format(FormatoPredeterminado, SeparadorSalida);
            }

            ExpresionFormato expresionFormato = new ExpresionFormato(FormatoSalida, SeparadorSalida);

            if (ForzarTodosCampos)
            {
                if (!expresionFormato.TagFormato.ContainsKey("[ThreadGUID]"))
                {
                    FormatoSalida += "[ThreadGUID]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[MethodGUID]"))
                {
                    FormatoSalida += "[MethodGUID]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Namespace]"))
                {
                    FormatoSalida += "[Namespace]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Class]"))
                {
                    FormatoSalida += "[Class]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Method]"))
                {
                    FormatoSalida += "[Method]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Type]"))
                {
                    FormatoSalida += "[Type]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Level]"))
                {
                    FormatoSalida += "[Level]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[DateTime]"))
                {
                    FormatoSalida += "[DateTime]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[VarName]"))
                {
                    FormatoSalida += "[VarName]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[VarValue]"))
                {
                    FormatoSalida += "[VarValue]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[StackTrace]"))
                {
                    FormatoSalida += "[StackTrace]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Data]"))
                {
                    FormatoSalida += "[Data]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[ExceptionType]"))
                {
                    FormatoSalida += "[ExceptionType]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Message]"))
                {
                    FormatoSalida += "[Message]" + SeparadorSalida;
                }
                if (!expresionFormato.TagFormato.ContainsKey("[Correlative]"))
                {
                    FormatoSalida += "[Correlative]" + SeparadorSalida;
                }

                expresionFormato.Recargar(FormatoSalida, SeparadorSalida);
            }

            string fechaActual  = DateTime.Now.ToString();
            string formatoFecha = "";

            if (expresionFormato.TagFormato.ContainsKey("[DateTime]"))
            {
                formatoFecha = expresionFormato.TagFormato["[DateTime]"];
                fechaActual  = DateTime.Now.ToString(formatoFecha);
            }

            string metodo = registro.Metodo.Substring(registro.Metodo.IndexOf(" ") + 1);

            metodo = metodo.Substring(0, metodo.IndexOf("("));

            string formatoMetodo = "Full";

            if (expresionFormato.TagFormato.ContainsKey("[Method]"))
            {
                formatoMetodo = expresionFormato.TagFormato["[Method]"];
            }

            if (!string.IsNullOrEmpty(formatoMetodo))
            {
                if (formatoMetodo.Equals("Full", StringComparison.InvariantCultureIgnoreCase))
                {
                    metodo = registro.Metodo;
                }
            }

            if (!string.IsNullOrEmpty(registro.StackTrace))
            {
                registro.StackTrace = "\n\t\t<StackTrace>\n\t\t\t" + CambiarCaracteres(registro.StackTrace) + "\n\t\t</StackTrace>\n";
            }

            string salida = FormatoSalida
                            .Replace("[ThreadGUID]", registro.ThreadGUID)
                            .Replace("[MethodGUID]", registro.MethodGUID)
                            .Replace("[Namespace]", registro.Namespace)
                            .Replace("[Class]", CambiarCaracteres(registro.Clase))
                            .Replace("[Method]", CambiarCaracteres(metodo))
                            .Replace(string.Format("[Method:{0}]", formatoMetodo), CambiarCaracteres(metodo))
                            .Replace("[Type]", registro.Tipo.Codigo)
                            .Replace("[Level]", registro.Nivel != null ? registro.Nivel.Codigo : SeparadorSalida.ToString())
                            .Replace("[DateTime:" + formatoFecha + "]", fechaActual)
                            .Replace("[DateTime]", fechaActual)
                            .Replace("[VarName]", registro.NombreVariable)
                            .Replace("[VarValue]", CambiarCaracteres(registro.ValorVariable))
                            .Replace("[StackTrace]", registro.StackTrace)
                            .Replace("[Data]", CambiarCaracteres(registro.Data))
                            .Replace("[ExceptionType]", registro.TipoExcepcion)
                            .Replace("[Message]", CambiarCaracteres(registro.Mensaje))
                            .Replace("[Correlative]", registro.Correlativo.ToString());

            return(salida);
        }
Пример #15
0
 /// <summary>
 /// Persiste el registro recibido.
 /// </summary>
 /// <remarks>
 ///     Registro de versiones:
 ///
 ///         1.0 10/04/2016 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
 /// </remarks>
 /// <param name="registro">Registro unificado a ser escrito.</param>
 protected abstract void Agregar(RegistroInLineTO registro);
Пример #16
0
        /// <summary>
        /// Registra el inicio de un método, guarda la hora actual y cada parametro especificando
        /// nombre, tipo y valor. Se recomienda que esta sea la primera instrucción de cada método.
        /// Si se logea el inicio, es obligatorio logear el retorno aunque el método sea Void.
        /// </summary>
        /// <example>
        ///     public void Metodo1(int a, string b, bool c)
        ///     {
        ///         log.Inicio(a, b, c);
        ///         log.Retorno();
        ///     }
        ///
        ///     public void Metodo2()
        ///     {
        ///         log.Inicio();
        ///         log.Retorno();
        ///     }
        /// </example>
        /// <remarks>
        ///     Registro de versiones:
        ///
        ///         1.0 02/03/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial.
        /// </remarks>
        /// <param name="parametros">Lista de parametros del método actual.</param>
        public void Inicio(params object[] parametros)
        {
            Writers = Log4MeBO.ObtenerWriters(InstanciaLog.Metodo);
            Log4MeManager.CurrentInstance = InstanciaLog;

            Llamada++;

            RegistroInLineTO registro = new RegistroInLineTO()
            {
                ThreadGUID  = Log4MeManager.ThreadGUID,
                MethodGUID  = InstanciaLog.MethodGUID,
                Namespace   = InstanciaLog.Metodo.DeclaringType.Namespace,
                Clase       = InstanciaLog.Metodo.DeclaringType.Name,
                Metodo      = InstanciaLog.Metodo.ToString(),
                Correlativo = Llamada,
                Tipo        = Tipo.Inicio
            };

            foreach (ALogWriter writer in Writers)
            {
                if (writer.PermiteTipo(Tipo.Inicio))
                {
                    writer.Guardar(registro);
                }
            }

            int numParametro = 0;

            if (parametros != null && parametros.Length > 0)
            {
                foreach (ParameterInfo param in InstanciaLog.Metodo.GetParameters())
                {
                    Llamada++;
                    string valor = string.Empty;

                    try
                    {
                        valor = JsonConverterFactory.ObtenerJsonConverter().ToJson(parametros[numParametro], true);
                    }
                    catch (Exception e)
                    {
                        valor = "Error al transformar a Json - " + e.Message.Replace("\n", "\t");
                    }

                    RegistroInLineTO parametro = new RegistroInLineTO()
                    {
                        ThreadGUID     = Log4MeManager.ThreadGUID,
                        MethodGUID     = InstanciaLog.MethodGUID,
                        Namespace      = InstanciaLog.Metodo.DeclaringType.Namespace,
                        Clase          = InstanciaLog.Metodo.DeclaringType.Name,
                        Metodo         = InstanciaLog.Metodo.ToString(),
                        NombreVariable = param.Name,
                        ValorVariable  = valor,
                        Correlativo    = Llamada,
                        Tipo           = Tipo.Parametro
                    };

                    foreach (ALogWriter writer in Writers)
                    {
                        if (writer.PermiteTipo(Tipo.Parametro))
                        {
                            writer.Guardar(parametro);
                        }
                    }
                    numParametro++;
                }
            }
        }
Пример #17
0
 protected override void Agregar(RegistroInLineTO registro)
 {
     writer.WriteLine(Formatear(registro));
 }