Package com.GestDB.general

Source Code of com.GestDB.general.Trackbug

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.GestDB.general;

import com.GestDB.Gestor;
import com.GestDB.swing.Alerta;
import com.utils.utilidades;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.helpers.Loader;

/**
*
* @author seni
*/
public class Trackbug extends OutputStream {
    public static int ERR = 0;
    public static int OUT = 1;
   
    private int tipo = ERR;
   
    private static org.apache.log4j.Logger registro;
    private static org.apache.log4j.Logger registroServer;
    static
    {
        try {
            PropertyConfigurator.configure(Trackbug.class.getResource("/com/GestDB/conf/log4j.properties"));
            registro = Logger.getLogger(Trackbug.class);
            System.setErr(new PrintStream(new Trackbug(Trackbug.ERR)));
            // System.setOut(new PrintStream(new Trackbug(Trackbug.OUT)));
            registroServer = Logger.getLogger("LogServer");
            System.out.println("Desviadas las salidas");
        } catch (Exception e) {
            BasicConfigurator.configure();
            registro = Logger.getLogger(Trackbug.class);
        }       
    }
   
    /**
     * Contruye el objeto indicandole el tipo de salida, puee ser ERR o OUT.
     * @param tipo tipo de salida, Trackbug.ERR o Trackbug.OUT
     */
    public Trackbug(int tipo) {
        this.tipo = tipo;
    }
   
    /**
     * Escribe la informaci�n en un log y valora si se tiene que enviar al desarrollador de gestdb
     * @param e Excepci�n que se a lanzado al producirse el error. Puede ser null.
     * @param Message Mensaje personalizado que se almacenar� para ese error. Si se pasa un valor null se escribir� el mensaje por defecto
     */
    public static void info(String Message)
    {
        registro.info(Message);
    }

    /**
     * Escribe la informaci�n en un log y valora si se tiene que enviar al desarrollador de gestdb
     * @param e Excepci�n que se a lanzado al producirse el error. Puede ser null.
     * @param Message Mensaje personalizado que se almacenar� para ese error. Si se pasa un valor null se escribir� el mensaje por defecto
     */
    public static void fatal(Throwable e, String Message)
    {
        String infothreads = getInfoThreads();
        registro.error(Message, e);
        registro.error(infothreads);
        showAlert(Message + "\n" + infothreads);
    }

    /**
     * Escribe la informaci�n en un log y valora si se tiene que enviar al desarrollador de gestdb
     * @param e Excepci�n que se a lanzado al producirse el error. Puede ser null.
     * @param Message Mensaje personalizado que se almacenar� para ese error. Si se pasa un valor null se escribir� el mensaje por defecto
     * @param level Nivel de log, Los niveles .
     */
    public static void error(Throwable e, String Message)
    {
        if(e == null)
        {
            registro.error(Message);
            registro.error(getInfoThreads());
        }
        else
        {
            registro.error(Message, e);
            registro.error(getInfoThreads());
        }
    }

    /**
     * Retorna informaci�n del estado de los thread en el momento de lanzar el error o la informaci�n.
     * @return Cadena con toda la informaci�n
     */
    public static String getInfoThreads()
    {
        StringBuilder sb = new StringBuilder();
       
        StackTraceElement ste[] = Thread.currentThread().getStackTrace();
        sb.append("Informaci�n Threads\n");
        sb.append("Thread actual:\n\t").append(Thread.currentThread().getName());
        for(int i = 0; i < ste.length; i++)
        {
            sb.append("\n\t\t at ").append(ste[i].toString());
        }

        sb.append("\nTodos los Thread:");
        Map<Thread, StackTraceElement[]> stes = Thread.getAllStackTraces();
        Object claves[] = stes.keySet().toArray();
        for(int i = 0; i < claves.length; i++)
        {
            StackTraceElement ste1[] = stes.get(claves[i]);
            if(ste1.length > 0)
            {
                sb.append("\n\t").append(claves[i].getClass().getCanonicalName());
                for(int j = 0; j < ste1.length; j++)
                {
                    sb.append("\n\t\t at ").append(ste1[j].toString());
                }
            }
        }
       
        return sb.toString();
    }
   
    public static void showAlert(String textSend)
    {
        Alerta al = new Alerta((java.awt.Frame)null, Gestor.GetLiteral("gestor.error_1","Error"), true, Gestor.GetLiteral("trackbug.send_developer","Se ha producido un error en la aplicaci�n. �Desea enviar el error al desarrollador?"), Alerta.OKCANCEL);
        al.setVisible(true);
        if(al.getReturnStatus() == al.RET_OK)
        {
            // Mandamos el error al servidor
            registroServer.fatal(textSend);
        }
    }

    @Override
    public void write(int b) throws IOException {
        if(tipo == Trackbug.ERR)
            registro.error(String.valueOf((byte)b));
        else
            registro.info(String.valueOf((byte)b));
    }

    @Override
    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }

    @Override
    public void write(byte b[], int off, int len) throws IOException {
        if(b[off + (len - 1)] == '\n')
            --len;
        if(len > 0)
        {
            if(tipo == Trackbug.ERR)
                registro.error(new String(b,off,len));
            else
                registro.info(new String(b,off,len));
        }
    }
}
TOP

Related Classes of com.GestDB.general.Trackbug

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.