All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.josebran.LogsJB.LogsJB Maven / Gradle / Ivy

Go to download

LogsJBSupport es una librería java que permite la gestión de registros de un programa en paralelo a la ejecución del programa, lo cual la hace una potente herramienta para programas empresariales y personales que exigen grandes niveles de rendimiento. Para mayor información, consultar el siguiente enlace https://github.com/JoseCarlosBran/LogsJB/blob/master/Readme.md

There is a newer version: 1.0.3
Show newest version
/***
 * Copyright (C) 2022 El proyecto de código abierto LogsJB de José Bran
 *
 * Con licencia de Apache License, Versión 2.0 (la "Licencia");
 * no puede usar este archivo excepto de conformidad con la Licencia.
 * Puede obtener una copia de la Licencia en
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * A menos que lo exija la ley aplicable o se acuerde por escrito, el software
 * distribuido bajo la Licencia se distribuye "TAL CUAL",
 * SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas.
 * Consulte la Licencia para conocer el idioma específico que rige los permisos y
 * limitaciones bajo la Licencia.
 */

package com.josebran.LogsJB;

import com.josebran.LogsJB.Numeracion.LogsJBProperties;
import com.josebran.LogsJB.Numeracion.NivelLog;
import com.josebran.LogsJB.Numeracion.SizeLog;
import org.apache.commons.lang3.exception.ExceptionUtils;

import java.lang.reflect.Field;

import static com.josebran.LogsJB.Execute.getInstance;
import static com.josebran.LogsJB.Execute.getListado;
import static com.josebran.LogsJB.MethodsTxt.convertir_fecha;

/****
 * Copyright (C) 2022 El proyecto de código abierto LogsJB de José Bran
 * Clase que proporciona los metodos de configuración y entrada para la escritura de los Logs en segundo plano.
 * Los metodos de configuración son:
 *      setRuta(Ruta);
 *      setGradeLog(NivelLog);
 *      setSizeLog(SizeLog);
 *
 * Los metodos de entrada son:
 *      trace(Texto);
 *      debug(Texto);
 *      info(Texto);
 *      warning(Texto);
 *      fatal(Texto);
 *      error(Texto);
 */
public class LogsJB {

    /***
     * Obtiene la ruta donde se estara escribiendo el Log.
     * @return Retorna un String con la ruta del archivo .Txt donde se estara escribiendo el Log.
     */
    public static String getRuta() {
        return MethodsTxt.ruta;
    }

    /**
     * Setea la ruta en la cual se desea que escriba el Log.
     *
     * @param Ruta Ruta del archivo .Txt donde se desea escribir el Log.
     */
    public static void setRuta(String Ruta) {
        try {
            Field field = MethodsTxt.class.getDeclaredField("ruta");
            field.setAccessible(true);
            field.set(null, Ruta);
            System.setProperty(LogsJBProperties.LogsJBRutaLog.getProperty(), Ruta);
        } catch (Exception e) {
            System.err.println("Excepcion capturada al tratar de setear la ruta del log " + Ruta);
        }
    }

    /**
     * Bandera que indica si la libreria esta siendo utilizada en Android
     *
     * @return True si la libreia esta siendo utilizada en Android, de lo contrario retorna False
     */
    public static Boolean getIsAndroid() {
        return MethodsTxt.isAndroid;
    }

    /**
     * Setea la bandera que indica si la libreria esta siendo utilizada en Android
     *
     * @param isAndroid True si la libreria esta siendo utilizada en Android, False si no esta siendo utilizada en Android
     */
    public static void setIsAndroid(Boolean isAndroid) {
        try {
            Field field = MethodsTxt.class.getDeclaredField("isAndroid");
            field.setAccessible(true);
            field.set(null, isAndroid);
            System.setProperty(LogsJBProperties.LogsJBIsAndroid.getProperty(), String.valueOf(isAndroid));
        } catch (Exception e) {
            System.err.println("Excepcion capturada al tratar de setear el contador de las veces que se a escrito en " +
                    "el log " + isAndroid + " Trace de la Exepción : " + ExceptionUtils.getStackTrace(e));
        }
    }

    /***
     * Obtiene el grado del log, sobre el cual se estara realizando el seguimiento de los mensajes que se
     * escriben en las bitacoras de Log de la aplicación actual.
     * Trace = 200,
     * Debug = 400,
     * Info = 500,
     * Warning = 600,
     * Error = 800,
     * Fatal = 1000.
     * @return Retorna un NivelLog el cual expresa el Nivel Log desde el cual se estara reportando al Log y sus
     * superiores, El valor por defaul es Info.
     */
    public static NivelLog getGradeLog() {
        return MethodsTxt.gradeLog;
    }

    /***
     * Setea el NivelLog desde el cual deseamos se escriba en el Log de la aplicación actual.
     * @param GradeLog Nivel Log desde el cual hacía arriba en la jerarquia de logs, deseamos se reporten
     *      * Trace = 200,
     *      * Debug = 400,
     *      * Info = 500,
     *      * Warning = 600,
     *      * Error = 800,
     *      * Fatal = 1000.
     * El valor por defaul es Info. Lo cual hace que se reporten los Logs de grado Info, Warning, Error y Fatal.
     */
    public static void setGradeLog(NivelLog GradeLog) {
        try {
            Field field = MethodsTxt.class.getDeclaredField("gradeLog");
            field.setAccessible(true);
            field.set(null, GradeLog);
            System.setProperty(LogsJBProperties.LogsJBNivelLog.getProperty(), GradeLog.name());
            //Methods.metodo = metodo;
        } catch (Exception e) {
            System.err.println("Excepcion capturada al tratar de setear el GradeLog de la aplicación " + GradeLog + " Trace de la Exepción : " + ExceptionUtils.getStackTrace(e));
        }
    }

    /****
     * Obtiene el tamaño maximo actual definido para el fichero de Log sobre el cual se estara escribiendo.
     * @return Retorna un SizeLog que representa el tamaño configurado para el archivo log de la aplicación,
     * El valor por defaul es Little_Little.
     */
    public static SizeLog getSizeLog() {
        return MethodsTxt.sizeLog;
    }

    /***
     * Setea el tamaño maximo para el archivo Log de la aplicación actual.
     * @param SizeLog Tamaño maximo del archivo sobre el cual se estara escribiendo el Log.
     *      * Little_Little = 25Mb,
     *      * Little = 50Mb,
     *      * Small_Medium = 100Mb,
     *      * Medium = 150Mb,
     *      * Small_Large = 250Mb,
     *      * Large = 500Mb.
     * El valor por defaul es Little_Little.
     */
    public static void setSizeLog(SizeLog SizeLog) {
        try {
            Field field = MethodsTxt.class.getDeclaredField("sizeLog");
            field.setAccessible(true);
            field.set(null, SizeLog);
            System.setProperty(LogsJBProperties.LogsJBSizeLog.getProperty(), SizeLog.name());
            //Methods.metodo = metodo;
        } catch (Exception e) {
            System.err.println("Excepcion capturada al tratar de setear el Tamaño del archivo Log " + SizeLog + " Trace de la Exepción : " + ExceptionUtils.getStackTrace(e));
        }
    }

    /***
     * Obtiene el usuario del sistema sobre el cual corre la aplicación
     * @return Retorna un String con el nombre del usuario actual.
     */
    public static String getUsuario() {
        return MethodsTxt.usuario;
    }

    /***
     * Setea el nombre del usuario del sistema sobre el cual corre la aplicación
     * @param Usuario Usuario actual del sistema que se desea indicar al Log.
     */
    public static void setUsuario(String Usuario) {
        try {
            Field field = MethodsTxt.class.getDeclaredField("usuario");
            field.setAccessible(true);
            field.set(null, Usuario);
        } catch (Exception e) {
            System.err.println("Excepcion capturada al tratar de setear el usuario del entorno actual " + Usuario + " Trace de la Exepción : " + ExceptionUtils.getStackTrace(e));
        }
    }

    /***
     * Metodo encargado de hacer la llamada al ejecutor en un hilo de ejecución aparte, para que este se encargue
     * de ejecutar los ejecutores de log's en subprocesos, diferentes al programa principal
     * @param nivelLog NivelLog del mensaje que queremos almacenar en el Log.
     * @param Texto Texto que se desea escribir en el Log.
     */
    private static void executor(NivelLog nivelLog, String Texto) {
        try {
            //Permitira obtener la pila de procesos asociados a la ejecuciòn actual
            StackTraceElement[] elements = Thread.currentThread().getStackTrace();
            String clase = null;
            String metodo = null;
            try {
                clase = elements[3].getClassName();
                metodo = elements[3].getMethodName() + " => " + elements[3].getLineNumber();
                if (getIsAndroid()) {
                    clase = elements[4].getClassName();
                    metodo = elements[4].getMethodName() + " => " + elements[4].getLineNumber();
                }
            } catch (Exception ex) {
                clase = elements[2].getClassName();
                metodo = elements[2].getMethodName() + " => " + elements[2].getLineNumber();
                if (getIsAndroid()) {
                    clase = elements[3].getClassName();
                    metodo = elements[3].getMethodName() + " => " + elements[3].getLineNumber();
                }
            }
            if (nivelLog.getGradeLog() >= getGradeLog().getGradeLog()) {
                MensajeWrite mensaje = new MensajeWrite();
                mensaje.setTexto(Texto);
                mensaje.setNivelLog(nivelLog);
                mensaje.setClase(clase);
                mensaje.setMetodo(metodo);
                mensaje.setFecha(convertir_fecha());
                getListado().addDato(mensaje);
                if (getInstance().getTaskisReady()) {
                    getInstance().run();
                }
            }
        } catch (Exception e) {
            System.err.println("Exepcion capturada en el metodo Metodo por medio del cual se llama la escritura de los logs" + " Trace de la Exepción : " + ExceptionUtils.getStackTrace(e));
        }
    }

    /**
     * Obtiene la bandera que indica si no existe alguna tarea pendiente de realizar por parte LogsJB
     *
     * @return True si la LogsJB se encuentra libre, si esta ocupado retorna False
     */
    public static Boolean getTaskIsReady() {
        return getInstance().getTaskisReady();
    }

    /**
     * Espera que se termine de ejecutar los trabajos que esta realizando el Log
     */
    public static void waitForOperationComplete() {
        while (!getTaskIsReady()) {
        }
        System.out.println("Completo de escribir los Logs");
    }

    /**
     * Recuperara las propiedades de LogsJB seteadas en las propiedades del sistema
     */
    public static void getLogsJBProperties() {
        getInstance().getLogsJBProperties();
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria de Informacion.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void info(String Texto) {
        executor(NivelLog.INFO, Texto);
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria de Debug.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void debug(String Texto) {
        executor(NivelLog.DEBUG, Texto);
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria de Trace, la cual es un seguimiento mayor a Debug.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void trace(String Texto) {
        executor(NivelLog.TRACE, Texto);
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria de Advertencia.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void warning(String Texto) {
        executor(NivelLog.WARNING, Texto);
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria Fatal lo cual indica un error del cual no es posible recuperarse.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void fatal(String Texto) {
        executor(NivelLog.FATAL, Texto);
    }

    /***
     * Escribe en el Log el mensaje especificado indicando que pertenece a la categoria de Error, lo cual indica que capturo un error.
     * @param Texto Texto que se desea escribir en el Log.
     */
    public static void error(String Texto) {
        executor(NivelLog.ERROR, Texto);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy