Why Structured Logging
Beyond System.out.println.
The Problem With println
System.out.println is fine for a quick experiment, but it is a poor logging tool for real applications.
- No timestamps, levels, or thread names.
- No way to turn it off in production.
- Writes to stdout only, with no routing.
public class Main {
public static void main(String[] args) {
// Crude: no level, no timestamp, always on
System.out.println("User logged in");
}
}What Logging Frameworks Add
A logging framework gives you:
- Levels (TRACE, DEBUG, INFO, WARN, ERROR) to filter noise.
- Timestamps, thread, and logger names automatically.
- Routing to files, console, or remote systems.
- Runtime configuration without recompiling.
public class Main {
public static void main(String[] args) {
// A framework would render: time, level, logger, thread, message
String simulated = "2026-01-01 10:00:00 INFO c.e.App [main] - User logged in";
System.out.println(simulated);
}
}All lessons in this course
- Why Structured Logging
- SLF4J Facade and Loggers
- Parameterized Logging
- Configuring Logback