Standard libraries

libs8Logging

Path
pkg13libs/libs8Logging.java
Package
pkg13libs
Study order
8
Run
Single-file source launch
Command
java pkg13libs/libs8Logging.java

There is no in-browser runner. This is the file from the curriculum, unchanged.

pkg13libs/libs8Logging.java
1package pkg13libs;2 3import java.util.logging.ConsoleHandler;4import java.util.logging.Formatter;5import java.util.logging.Level;6import java.util.logging.LogRecord;7import java.util.logging.Logger;8 9/*10 * libs8Logging.java11 * -----------------12 * Logging with java.util.logging (JUL) — the built-in, dependency-free logger.13 *14 * DEFINITION:15 *   A Logger records events at severity levels. Handlers decide where logs go16 *   (console, file); Formatters decide how they look; Levels filter what's kept.17 *   Real apps often use SLF4J + Logback/Log4j2, but the concepts are identical.18 *19 * KEY POINTS:20 *   - Levels: SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST.21 *   - setLevel() on the logger AND handler controls what is emitted.22 *   - Use lambda/supplier overloads to avoid building messages that get filtered.23 *   - Never log secrets; prefer parameterized messages over string concatenation.24 */25public class libs8Logging {26 27    private static final Logger log = Logger.getLogger(libs8Logging.class.getName());28 29    public static void main(String[] args) {30        // Configure a custom one-line formatter on a console handler31        log.setUseParentHandlers(false);              // don't double-print via root logger32        ConsoleHandler handler = new ConsoleHandler();33        handler.setLevel(Level.ALL);34        handler.setFormatter(new Formatter() {35            @Override public String format(LogRecord r) {36                return String.format("[%-7s] %s%n", r.getLevel(), r.getMessage());37            }38        });39        log.addHandler(handler);40        log.setLevel(Level.ALL);41 42        // Log at every level43        log.severe("database connection lost");44        log.warning("disk usage at 85%");45        log.info("user 42 logged in");46        log.config("cache size = 256MB");47        log.fine("entering method process()");48 49        // Lazy message (only built if FINE is enabled) — avoids wasted work50        log.fine(() -> "expensive detail: " + expensiveComputation());51 52        // Log an exception with a stack trace53        try {54            throw new IllegalStateException("simulated failure");55        } catch (Exception e) {56            log.log(Level.SEVERE, "operation failed", e);57        }58 59        // Raise the threshold: now only WARNING+ are shown60        System.out.println("\n-- raising level to WARNING --");61        log.setLevel(Level.WARNING);62        log.info("this INFO is now suppressed");63        log.warning("this WARNING still shows");64    }65 66    static String expensiveComputation() { return "computed-" + (2 * 21); }67}