# captured: Python logging with configured formats
2026-10-21 17:15:30,701 [DEBUG] app.db: debug message ⇒ {"rule": "layout", "level": "debug", "name": "app.db", "message": "debug message"}
2026-10-21 17:15:30,752 | DEBUG    | app.db:go:11 - debug message ⇒ {"rule": "layout", "level": "debug", "name": "app.db", "message": "debug message", "file": "", "line": 11}
2026-10-21 17:15:30,778 DEBUG [py_logging.py:11] debug message ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "debug message", "file": "py_logging.py", "line": 11}
2026-10-21 17:15:30,598 DEBUG app.db debug message ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "app.db debug message"}
2026-10-21 17:15:46.240 | DEBUG    | __main__:<module>:4 - debug message ⇒ {"rule": "layout", "level": "debug", "name": "__main__", "message": "debug message", "file": "", "line": 4}
[2026-10-21 17:16:46 -0700] [50488] [DEBUG] Current configuration: ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "Current configuration:"}
# captured: log4j 1, log4j 2, logback and log4net with configured patterns
0 [main] DEBUG app.db  - debug message ⇒ {"rule": "layout", "level": "debug", "name": "app.db", "message": "debug message"}
2026-10-21 17:21:02,320 DEBUG db:9 - debug message ⇒ {"rule": "layout", "level": "debug", "name": "db", "message": "debug message"}
# a Rust path names the logger, as log4rs's and simplelog's patterns print it
# constructed 2026-10-21 17:21:02 INFO myapp::db: connected ⇒ {"rule": "layout", "level": "info", "name": "myapp::db", "message": "connected"}
73   [main] TRACE app.db - trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
2026-10-21 17:35:12,519 TRACE [main] app.db: trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
2026-10-21T17:35:12,956 TRACE [main] app.db: trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
2026-10-21 17:35:13 TRACE app.db:5 - trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
17:35:14.112 TRACE app.db - trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
[2026-10-21 17:35:14] [TRACE] app.db - trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
2026-10-21 17:35:17,403 TRACE [main] app.db [Slf4jDemo.java:5] trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message", "file": "Slf4jDemo.java", "line": 5}
[main] WARN app.db - warning message ⇒ {"rule": "layout", "level": "warn", "name": "app.db", "message": "warning message"}
48 [1] DEBUG MyApp.Db (null) - debug message ⇒ {"rule": "layout", "level": "debug", "name": "MyApp.Db", "message": "debug message"}
2026-10-21 17:41:06,927 [1] DEBUG MyApp.Db [(null)] - debug message ⇒ {"rule": "layout", "level": "debug", "name": "MyApp.Db", "message": "debug message"}
# captured: Serilog and NLog
[17:23:36 VRB] verbose message ⇒ {"rule": "layout", "level": "trace", "name": "", "message": "verbose message"}
2026-10-21 17:23:36.740 -07:00 [VRB] MyApp.Db: verbose message ⇒ {"rule": "layout", "level": "trace", "name": "MyApp.Db", "message": "verbose message"}
2026-10-21T17:23:36.9440470-07:00 [Verbose] verbose message ⇒ {"rule": "layout", "level": "trace", "name": "", "message": "verbose message"}
2026-10-21 17:23:37.0305|TRACE|MyApp.Db|trace message ⇒ {"rule": "layout", "level": "trace", "name": "MyApp.Db", "message": "trace message"}
# captured: pino-pretty, the bunyan CLI and winston
[17:17:54.501] TRACE (app.db/51705): trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
00:18:03.378Z TRACE app.db: trace message ⇒ {"rule": "layout", "level": "trace", "name": "app.db", "message": "trace message"}
2026-10-22T00:18:10.561Z silly: silly message ⇒ {"rule": "layout", "level": "trace", "name": "", "message": "silly message"}
# captured: Monolog, Elixir and Erlang
2026-10-22 00:28:48 DEBUG app.db: debug message ⇒ {"rule": "layout", "level": "debug", "name": "app.db", "message": "debug message"}
[2026-10-22 00:28:48] [DEBUG] debug message ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "debug message"}
17:18:50.875 [debug] debug message ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "debug message"}
2026-10-21T17:19:11.671674-07:00 error: error single ⇒ {"rule": "layout", "level": "error", "name": "", "message": "error single"}
# a level word only counts in a line's header
# constructed 2026-10-21 14:03:01 error rate is high ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 14:03:01 error rate is high"}
# constructed 2026-10-21 14:03:01 the ERROR count rose ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 14:03:01 the ERROR count rose"}
# constructed 14:03:01 Warning signs were ignored ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "14:03:01 Warning signs were ignored"}
# constructed error: 0 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "error: 0"}
# constructed errors: 5 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "errors: 5"}
# constructed [1/3] Building CXX object main.o ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[1/3] Building CXX object main.o"}
# constructed main.c:10:5: error: expected ';' before 'return' ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "main.c:10:5: error: expected ';' before 'return'"}
# constructed 12:03:01 up 3 days,  2:04,  load average: 0.10 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "12:03:01 up 3 days,  2:04,  load average: 0.10"}
# constructed [2026-10-21 14:03:01] boot complete ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[2026-10-21 14:03:01] boot complete"}
# constructed INFOMANIAC is not a level ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "INFOMANIAC is not a level"}
# constructed 2026-10-21 14:03:01 [ERRORS] is not a level word ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 14:03:01 [ERRORS] is not a level word"}
# constructed [Error count] 3 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[Error count] 3"}
# constructed 2026-10-21 14:03:01 info the word is not followed by a colon ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "2026-10-21 14:03:01 info the word is not followed by a colon"}
# capitalized before a colon, as the level-word rule reads it at the start of a line
# constructed 2026-10-21 14:03:01 Error: disk full ⇒ {"rule": "layout", "level": "error", "name": "", "message": "disk full"}
# captured: Go and Rust loggers whose defaults are a configured layout: hashicorp/go-hclog v1.6.3
# intlogger.go, zerolog v1.35.1 console.go, log4rs 1.4.0 src/encode/pattern/mod.rs (`{d} {l} {t} - {m}`)
2026-10-21T17:15:46.011-0700 [TRACE] myapp.db: trace msg: k=1 ⇒ {"rule": "layout+kv", "level": "trace", "name": "myapp.db", "message": "trace msg: k=1"}
2026-10-21T17:15:46.011-0700 [INFO]  myapp.db: info msg: k=v ⇒ {"rule": "layout", "level": "info", "name": "myapp.db", "message": "info msg: k=v"}
2026-10-21T17:15:46.011-0700 [INFO]  unnamed ⇒ {"rule": "layout", "level": "info", "name": "", "message": "unnamed"}
5:15PM INF info msg k=v logger=myapp ⇒ {"rule": "layout", "level": "info", "name": "", "message": "info msg k=v logger=myapp"}
5:15PM PNC panic msg logger=myapp ⇒ {"rule": "layout", "level": "critical", "name": "", "message": "panic msg logger=myapp"}
2026-10-21T17:15:44-07:00 WRN warn msg ⇒ {"rule": "layout", "level": "warn", "name": "", "message": "warn msg"}
2026-10-21T17:16:51.741442-07:00 INFO log4rs_default - info msg ⇒ {"rule": "layout", "level": "info", "name": "log4rs_default", "message": "info msg"}
# captured: C++ loggers whose defaults are a configured layout: easylogging++ v9.97.1 above debug, and
# log4cplus REL_2_2_1 src/layout.cxx TTCCLayout; POCO 1.15.4 PatternFormatter with %p
2026-10-21 17:38:03,844 INFO [myapp] info msg named ⇒ {"rule": "layout", "level": "info", "name": "myapp", "message": "info msg named"}
# constructed 1234 [140245] ERROR myapp.db - connect failed ⇒ {"rule": "layout", "level": "error", "name": "myapp.db", "message": "connect failed"}
# constructed 2026-10-21 14:03:01.123 [Information] myapp: starting up ⇒ {"rule": "layout", "level": "info", "name": "myapp", "message": "starting up"}
# constructed 2026-10-21 14:03:01.123 [Critical] myapp: panic ⇒ {"rule": "layout", "level": "critical", "name": "myapp", "message": "panic"}
# Python's logging HOWTO, `%(asctime)s %(levelname)s %(message)s`: a label and its value after the
# level is the message, not a logger
---
# constructed 2026-10-21 14:03:01 INFO temperature: 25.3 ⇒ {"rule": "layout", "level": "info", "name": "", "message": "temperature: 25.3", "values": []}
# constructed 2026-10-21 14:03:02 INFO temperature: 25.4 ⇒ {"rule": "layout+label-value", "level": "info", "name": "", "message": "temperature: 25.4", "values": [["temperature", 25.4, null]]}
---
---
# constructed 2026-10-21 14:03:01 WARN pressure: -0.5 bar ⇒ {"rule": "layout", "level": "warn", "name": "", "message": "pressure: -0.5 bar"}
# constructed 2026-10-21 14:03:02 WARN pressure: -0.6 bar ⇒ {"rule": "layout+label-value", "level": "warn", "name": "", "message": "pressure: -0.6 bar", "values": [["pressure", -0.6, "bar"]]}
---
# constructed 2026-10-21 14:03:01 INFO pump: 3 retries left ⇒ {"rule": "layout", "level": "info", "name": "pump", "message": "3 retries left"}
# constructed 2026-10-21 14:03:01 INFO app.pump: 25.3 ⇒ {"rule": "layout", "level": "info", "name": "app.pump", "message": "25.3"}
# Python's `%(asctime)s - %(levelname)s - %(message)s`, with its default stamp or a datefmt
# constructed 2024-03-27 11:34:21,909 - ERROR - pump stalled ⇒ {"rule": "layout", "level": "error", "name": "", "message": "pump stalled", "stamp": "2024-03-27 11:34:21,909"}
# constructed 2024-03-27 11:34:21 - WARNING - pressure low ⇒ {"rule": "layout", "level": "warn", "name": "", "message": "pressure low"}
# constructed 2024-03-27 11:34:21 | ERROR | pump stalled ⇒ {"rule": "layout", "level": "error", "name": "", "message": "pump stalled"}
# constructed 12:00:00 - the ERROR count rose ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "12:00:00 - the ERROR count rose"}
# robotframework 7.1 src/robot/output/filelogger.py: the syslog's `timestamp | level | message`;
# lnav's robot_fwk_log sample separates them with dashes
20260327 11:34:21.909 - DEBUG - Test timeout 5 minutes active. 300.0 seconds left. ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "Test timeout 5 minutes active. 300.0 seconds left.", "stamp": "20260327 11:34:21.909"}
# constructed 20260327 11:34:21.909 | INFO  | Running suite ⇒ {"rule": "layout", "level": "info", "name": "", "message": "Running suite"}
# hashicorp/go-hclog v1.6.3 intlogger.go logPlain with IncludeLocation: ` file:line:` after the
# level, then the name; C's `__FILE__:__LINE__:` the same
# constructed 2021-01-01T10:00:00.000Z [INFO]  myapp/main.go:12: myapp: starting ⇒ {"rule": "layout", "level": "info", "name": "myapp", "message": "starting", "file": "myapp/main.go", "line": 12}
# constructed 2024-01-01 10:00:00 ERROR main.c:42: storage: write failed ⇒ {"rule": "layout", "level": "error", "name": "storage", "message": "write failed", "file": "main.c", "line": 42}
# constructed 2024-01-01 10:00:00 ERROR main.c:42: write failed ⇒ {"rule": "layout", "level": "error", "name": "", "message": "write failed", "file": "main.c", "line": 42}
# zerolog v1.35.1 console.go consoleDefaultFormatCaller: the caller, then ` >`
# constructed 3:04PM INF main.go:12 > pump started ⇒ {"rule": "layout", "level": "info", "name": "", "message": "pump started", "file": "main.go", "line": 12}
# constructed 2026-10-21T17:15:44-07:00 WRN pump/main.go:30 > pressure low ⇒ {"rule": "layout", "level": "warn", "name": "", "message": "pressure low", "file": "pump/main.go", "line": 30}
# pino-pretty 13 README: `(name/pid on hostname)`, each part an option
# constructed [17:35:28.992] INFO (42): hello world ⇒ {"rule": "layout", "level": "info", "name": "", "message": "hello world"}
# constructed [17:35:28.992] INFO (42 on bench-1): hello world ⇒ {"rule": "layout", "level": "info", "name": "", "message": "hello world"}
# constructed [17:35:28.992] WARN (pump/42 on bench-1): pressure low ⇒ {"rule": "layout", "level": "warn", "name": "pump", "message": "pressure low"}
# constructed [17:35:28.992] INFO (x): not a process ⇒ {"rule": "layout", "level": "info", "name": "", "message": "(x): not a process"}
# log4j 1.2 PatternLayout `%d %-5p [%t] - %m%n` and `%5p %c [%t] - %m%n`: a separator after the thread
# or the logger's bracketed field
# constructed 2024-01-01 10:00:00.123 DEBUG [main] - started ⇒ {"rule": "layout", "level": "debug", "name": "main", "message": "started"}
# constructed 2024-01-01 10:00:00.123 INFO com.acme.Pump [main] - started ⇒ {"rule": "layout", "level": "info", "name": "com.acme.Pump", "message": "started"}
# constructed  INFO [main] com.acme.Pump - started ⇒ {"rule": "level-word", "level": "info", "name": "com.acme.Pump", "message": "started"}
# constructed  WARN [main] - pressure low ⇒ {"rule": "level-word", "level": "warn", "name": "main", "message": "pressure low"}
# constructed  INFO started without fields ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": " INFO started without fields"}
# nextflow 25.04 logback.xml: `%d{MMM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n`
Mar-18 21:41:15.684 [main] DEBUG nextflow.cli.Launcher - $> nextflow run nf-core/rnaseq -profile test,docker --outdir results ⇒ {"rule": "layout", "level": "debug", "name": "nextflow.cli.Launcher", "stamp": "Mar-18 21:41:15.684", "message": "$> nextflow run nf-core/rnaseq -profile test,docker --outdir results"}
# winstonjs/winston v3.19.0 npm levels, highest first: error, warn, info, http, verbose, debug, silly;
# README's custom format `${timestamp} ${level}: ${message}`
# constructed 2024-01-01T00:00:00.000Z http: GET /pumps ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "GET /pumps"}
# constructed 2024-01-01T00:00:00.000Z verbose: cache miss ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "cache miss"}
# constructed 2024-01-01T00:00:00.000Z debug: cache hit ⇒ {"rule": "layout", "level": "debug", "name": "", "message": "cache hit"}
# constructed http: GET /pumps ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "http: GET /pumps"}
# constructed 2026-10-21 14:03:01 INFO warning: disk low ⇒ {"rule": "layout", "level": "info", "name": "", "message": "warning: disk low"}
