¡Buen día!

Les comparto el código de un appender de log4j que puede ser útil para las personas que necesitan crear un appender que desde un plugin de Eclipse tenga la capacidad de imprimir logs en la consola de Eclipse.

Le puede servir también a las personas que desean crear un appender propio para log4j.

Esto lo aprendí creando la versión 5.0 de Zathuracode.

package org.zcode.eclipse.plugin.log;
import java.io.IOException;
import org.apache.log4j.AppenderSkeleton; 
import org.apache.log4j.spi.LoggingEvent; 
import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; 
import org.eclipse.ui.console.IConsoleManager; 
import org.eclipse.ui.console.MessageConsole; 
import org.eclipse.ui.console.MessageConsoleStream;
/**  
* Este appender sirve para imprimir los log de ZathuraCode en la consola de eclipse
*
* @author dgomez
*
*/
public class EclipseAppender extends AppenderSkeleton { 
	private static String CONSOLE_NAME="zathuraCodeConsole"; 	 	
	private static MessageConsole myConsole=null; 	 	
	private static MessageConsoleStream out=null;  	
	public EclipseAppender() { 		 		
		if(myConsole==null || out==null){ 			
			myConsole = findConsole(CONSOLE_NAME); 			
			out = myConsole.newMessageStream(); 		    out.println("Zathuracode is Cool"); 
		} 		 
	} 	 	

	@Override
 	protected void append(LoggingEvent loggingEvent) { 		
	out.println(getLayout().format(loggingEvent)); 	} 	 	
	/*
 	 * Busca la consola de eclipse para poder escribir los log 	 
	*/
 	private MessageConsole findConsole(String name) { 	      
	ConsolePlugin plugin = ConsolePlugin.getDefault(); 	      
	IConsoleManager conMan = plugin.getConsoleManager(); 	      
	IConsole[] existing = conMan.getConsoles(); 	      
	for (int i = 0; i < existing.length; i++) 	         
		if (name.equals(existing[i].getName())) 	                    return (MessageConsole) existing[i]; 	    	      

	MessageConsole myConsole = new MessageConsole(name, null); 	      	conMan.addConsoles(new IConsole[]{myConsole}); 	      
	return myConsole; 	   
	}  	
	@Override 	
	public void close() { 
		try { 			
	if(out!=null){ 				
	out.close(); 				
	myConsole=null; 				
	out=null; 			
} 		
} catch (IOException e) { 			
e.printStackTrace(); 		
} 	
} 	 	
@Override 	
public boolean requiresLayout() { 		
return true; 
	}
}

La configuración de log4j.xml es la siguiente:

 
 
  
 
    
         
   


   	    
     
 	     	
	     
-->          
 

        

Y eso es todo, ya todos tus log usando log4j en un plugin de Eclipse se muestran en la consola.

No hay comentarios

Leave a Reply

Your email address will not be published. Required fields are marked *