# Guía Divertida y Definitiva del Logging en Java 🪵😄

¿Alguna vez sentiste que tu aplicación Java está poseída porque no sabes por qué falla? ¡El logging es tu superpoder para ver en la oscuridad! 🔦
En esta guía vamos a descubrir cómo convertirte en el Sherlock Holmes del código usando logs. Te enseñaré desde los básicos hasta hacks avanzados de logging que harán que tu app cante como un canario. 🐤
¿Qué hace especial al logging en Java?
Java es como el buffet de los frameworks de logging: tienes muchas opciones y puedes combinarlas. Desde el clásico java.util.logging (JUL), hasta los poderosos Log4j2, SLF4J, Logback, y más.
¡Vamos a explorarlos uno por uno!
🧱 java.util.logging (JUL) – El clásico
Está incorporado en Java desde siempre. Es como la bicicleta de cuando eras pequeño: sencilla, confiable... pero no te va a ganar una carrera.
import java.util.logging.*;
public class MiLoggerAntiguo {
private static final Logger logger = Logger.getLogger(MiLoggerAntiguo.class.getName());
public static void main(String[] args) throws Exception {
FileHandler archivo = new FileHandler("miapp.log");
archivo.setFormatter(new SimpleFormatter());
logger.addHandler(archivo);
logger.setUseParentHandlers(false);
logger.info("¡Empezamos la fiesta de los logs!");
}
}
✅ Ventajas: sin dependencias extra, siempre está ahí.
❌ Desventajas: configuración algo fea, pocos juguetes para jugar.
🔥 Log4j 2 – El musculoso
Más rápido, más configurable y con mejor rendimiento.
import org.apache.logging.log4j.*;
public class Log4jEjemplo {
private static final Logger log = LogManager.getLogger();
public static void main(String[] args) {
log.info("Procesando pedido de empanadas...");
log.warn("¡Ojo! Las empanadas vienen sin ají.");
log.error("¡Se quemaron las empanadas!");
}
}
Ventajas: asincrónico, configurable al 100%, ideal para apps exigentes.
Consejo: usa log4j2.xml para configurarlo como un profesional.
🤹♂️ SLF4J + Logback – La dupla de moda
SLF4J es una fachada. Te deja cambiar de backend sin tocar tu código.
import org.slf4j.*;
public class Slf4jEjemplo {
private static final Logger log = LoggerFactory.getLogger(Slf4jEjemplo.class);
public static void main(String[] args) {
log.info("Login del usuario: Goku");
log.debug("Goku intenta autenticarse usando energía espiritual...");
}
}
Logback (el motor detrás) es superligero y perfecto para Spring Boot.
🧠 Problemas comunes de logging
- Nada se imprime: probablemente faltan los archivos
.propertieso.xml. - No ves tus mensajes: revisa que el nivel de logs esté configurado bien (
DEBUG,INFO, etc.). - El disco explota de logs: implementa rotación de archivos.
🐢 ¿Tu app va lenta? Tal vez estás loggeando demasiado
En lugar de esto (no lo hagas):
log.debug("Resultado: " + calculoLento());
Haz esto (¡mucho mejor!):
log.debug("Resultado: {}", () -> calculoLento());
Y si estás en producción, usa AsyncAppender para escribir los logs sin frenar tu app.
📦 Buenas prácticas
- INFO: para cosas útiles ("Pedido recibido").
- WARN: advertencias que no rompen pero preocupan ("Stock bajo").
- ERROR: cosas que explotaron feo ("DB no responde").
- DEBUG: útil mientras desarrollás.
- TRACE: para cuando querés ver TODO.
🧾 Logging estructurado
¿Por qué conformarte con logs planos? ¡Agregá contexto!
{
"timestamp": "2025-05-22T12:00:00",
"level": "ERROR",
"mensaje": "Se rompió la piñata",
"usuario": "mario.bros",
"evento": "fiesta-de-cumple"
}
Ideal para herramientas como ELK, Grafana o Last9.
🕵️♂️ Logging con contexto
¿Querés saber qué usuario hizo qué en cada request? Usá MDC o NDC para agregar datos como requestId, userId, IP, etc.
MDC.put("usuario", "goku");
logger.info("Transformación activada"); // [usuario=goku]
🎯 Conclusión
El logging es tu arma secreta contra bugs, errores misteriosos y monstruos en producción. Con buenas prácticas, herramientas adecuadas y un poco de amor, ¡puede salvarte de madrugadas sin dormir! 😴
¿Listo para convertirte en un ninja del logging? 🥷🪵





