# tinylog 2.7.0 AbstractFormatPatternWriter.java DEFAULT_FORMAT_PATTERN: "{date} [{thread}] {class}.{method}()\n{level}: {message}"
# The header carries the date, the thread and the caller; the level and message follow on the next line.
# captured: tinylog 2.7.0 with no configuration
2026-10-21 17:20:56 [main] TinylogDemo.main() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "TinylogDemo", "message": ""}
# packages, nested classes, lambdas, constructors and other threads
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.start() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump$Valve.open() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump$Valve", "message": ""}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.lambda$run$0() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.<init>() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.<clinit>() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [pool-1-thread-1] com.acme.Pump.run() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [Thread-0] com.acme.Pump.run() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [ForkJoinPool.commonPool-worker-1] com.acme.Pump.run() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [http-nio-8080-exec-1] org.acme.web.Controller.get() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "org.acme.web.Controller", "message": ""}
# constructed 2026-01-01 00:00:00 [main] App.main() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "App", "message": ""}
# constructed 2026-12-31 23:59:59 [main] App.stop() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "App", "message": ""}
# constructed 2026-10-21 17:20:56 [main] a.b.c.D.e() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "a.b.c.D", "message": ""}
# constructed 2026-10-21 17:20:56 [worker 2] com.acme.Pump.run() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.run_once() ⇒ {"rule": "tinylog-header", "level": "info", "leveled": false, "name": "com.acme.Pump", "message": ""}
# the record's second line, and lines that only look like this header
TRACE: trace message ⇒ {"rule": "level-word", "level": "trace", "message": "trace message"}
ERROR: failed with exception: java.lang.RuntimeException: boom ⇒ {"rule": "level-word", "level": "error", "message": "failed with exception: java.lang.RuntimeException: boom"}
	at TinylogDemo.main(TinylogDemo.java:5) ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "\tat TinylogDemo.main(TinylogDemo.java:5)"}
# constructed 2026-10-21 17:20:56 [main] INFO app.db: a layout line ⇒ {"rule": "layout", "level": "info", "name": "app.db", "message": "a layout line"}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.run() started ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 17:20:56 [main] com.acme.Pump.run() started"}
# constructed 2026-10-21 17:20:56 [main] run() ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 17:20:56 [main] run()"}
# constructed 2026-10-21 17:20:56 com.acme.Pump.run() ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 17:20:56 com.acme.Pump.run()"}
# constructed 2026-10-21 17:20:56 [main] com.acme.Pump.run(int) ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 17:20:56 [main] com.acme.Pump.run(int)"}
# constructed [main] com.acme.Pump.run() ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[main] com.acme.Pump.run()"}
# constructed 17:20:56 [main] com.acme.Pump.run() ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "17:20:56 [main] com.acme.Pump.run()"}
