Logger - manu9/patterns GitHub Wiki

Enunciado ejemplo Logger

Supongamos que queremos implementar nuestra propia clase de log, por lo cual queremos que haya una sola instancia, objeto que realice esta tarea, por lo tanto buenas razones para implementar aquí el patrón de diseño Singleton.

Crearemos una enum llamado "Logger" con un método que nos permita ir logeando por consola todo lo que sucede en la aplicación donde se llame a esta clase.

import java.util.Date;

public enum Logger {
	INSTANCE;

	private static String levelLog = " [INFO] ";

	public static void log(String mensaje) {
		System.out.println(new Date() + levelLog + mensaje);
	}

	public static void setLevelLog(String level) {
		if ("debug".equalsIgnoreCase(level)) {
			levelLog = " [DEBUG] ";
		} else if ("error".equalsIgnoreCase(level)) {
			levelLog = " [ERROR] ";
		}else{
			levelLog = " [INFO] ";
		}
	}
}

Hemos creado un método público static llamado "log" que recibe un mensaje y lo imprime por consola, luego tenemos otro método que nos permite configurar el nivel de log que aparecerá impreso por consola, el cual por defecto es "info".

Ahora implementamos nuestro ejemplo en donde creamos una instancia Logger "log_1" y logeamos lo siguiente log_1.log("Inicio Aplicac1ión..."); lo que nos imprime por consola "Tue Aug 15 00:19:19 CLST 2017 [INFO] Inicio Aplicación...", pero luego le pasamos a "log_1" el nivel "debug" y creamos otra instancia "log_2" y le decimos que nos imprima lo siguiente log_2.log("Probando el log info..."); lo que nos imprime por consola "Tue Aug 15 00:19:19 CLST 2017 [DEBUG] Probando el log info...", esto nos confirma que en Logger log_2 = Logger.INSTANCE; nos ha entregado la misma instancia y no ha creado otra. ya que por defecto cuando creamos la instancia deberia salir "[INFO]" y no "[DEBUG]".

public class App {
	
	public static void main(String[] args) {
		Logger log_1 = Logger.INSTANCE;
		log_1.log("Inicio Aplicación...");
		// output: Tue Aug 15 00:19:19 CLST 2017 [INFO] Inicio Aplicación...
		
		log_1.setLevelLog("debug");
		Logger log_2 = Logger.INSTANCE;
		
		log_2.log("Probando el log info...");
		// output: Tue Aug 15 00:19:19 CLST 2017 [DEBUG] Probando el log info...
		
		// asi se llama el Logger
		Logger.log("Probando el log...");
                // output: Tue Aug 15 00:19:19 CLST 2017 [DEBUG] Probando el log...
	}

}