# charmbracelet/log v2.0.1 text.go and styles.go: the level padded to five, the caller in angle
# brackets, the prefix and a colon, the message, then key=value; captured with a prefix and with
# the caller, terminal colors removed
DEBUG myapp: debug msg k=1 ⇒ {"rule": "charm+kv", "level": "debug", "name": "myapp", "message": "debug msg k=1", "values": [["k", 1, null]], "prefixed": true, "device_ns": null}
INFO  myapp: info msg k=v ⇒ {"rule": "charm", "level": "info", "name": "myapp", "message": "info msg k=v", "values": [], "prefixed": true, "device_ns": null}
WARN  myapp: warn msg k="has space" ⇒ {"rule": "charm", "level": "warn", "name": "myapp", "message": "warn msg k=\"has space\"", "values": [], "prefixed": true, "device_ns": null}
ERROR myapp: error msg err="connection refused" ⇒ {"rule": "charm", "level": "error", "name": "myapp", "message": "error msg err=\"connection refused\"", "values": [], "prefixed": true, "device_ns": null}
INFO  myapp: multi ⇒ {"rule": "charm", "level": "info", "name": "myapp", "message": "multi", "values": [], "prefixed": true, "device_ns": null}
# constructed 2026/10/21 17:15:52 INFO  myapp: stamped ⇒ {"rule": "charm", "level": "info", "name": "myapp", "message": "stamped", "values": [], "prefixed": true, "device_ns": null}
# constructed DEBUG <charm/main.go:13> debug msg k=1 ⇒ {"rule": "charm+kv", "level": "debug", "name": "", "message": "debug msg k=1", "values": [["k", 1, null]], "prefixed": true, "file": "charm/main.go", "line": 13, "device_ns": null}
# constructed ERROR <charm/main.go:16> myapp: caller and prefix ⇒ {"rule": "charm", "level": "error", "name": "myapp", "message": "caller and prefix", "values": [], "prefixed": true, "file": "charm/main.go", "line": 16, "device_ns": null}
# constructed FATAL pump: gave up ⇒ {"rule": "charm", "level": "critical", "name": "pump", "message": "gave up", "values": [], "prefixed": true, "device_ns": null}
# constructed WARN  <main.go:9> low pressure ⇒ {"rule": "charm", "level": "warn", "name": "", "message": "low pressure", "values": [], "prefixed": true, "file": "main.go", "line": 9, "device_ns": null}
# constructed INFO  acme.pump: dotted prefix ⇒ {"rule": "charm", "level": "info", "name": "acme.pump", "message": "dotted prefix", "values": [], "prefixed": true, "device_ns": null}
# constructed INFO  can-bus: dashed prefix ⇒ {"rule": "charm", "level": "info", "name": "can-bus", "message": "dashed prefix", "values": [], "prefixed": true, "device_ns": null}
# constructed ERROR pump:  ⇒ {"rule": "charm", "level": "error", "name": "pump", "message": "", "values": [], "prefixed": true, "device_ns": null}
# constructed WARN  pump: error: not the level ⇒ {"rule": "charm", "level": "warn", "name": "pump", "message": "error: not the level", "values": [], "prefixed": true, "device_ns": null}
# constructed INFO  pump: rail=13.65V ⇒ {"rule": "charm+kv", "level": "info", "name": "pump", "message": "rail=13.65V", "values": [["rail", 13.65, "V"]], "prefixed": true, "device_ns": null}
# constructed DEBUG pump_ctl: underscore prefix ⇒ {"rule": "charm", "level": "debug", "name": "pump_ctl", "message": "underscore prefix", "values": [], "prefixed": true, "device_ns": null}
# constructed INFO myapp: one space after INFO, as v0.4 prints it ⇒ {"rule": "charm", "level": "info", "name": "myapp", "message": "one space after INFO, as v0.4 prints it"}
# constructed INFO  Connecting: a capital is a sentence ⇒ {"rule": "level-word", "level": "info", "message": "Connecting: a capital is a sentence"}
# constructed INFO  connecting to the pump ⇒ {"rule": "level-word", "level": "info", "message": "connecting to the pump"}
2026/10/21 17:15:52 INFO  info msg k=v ⇒ {"rule": "go-log", "level": "info", "message": "info msg k=v"}
2026/10/21 17:15:52 print msg ⇒ {"rule": "go-log", "level": "info", "message": "print msg"}
myapp: print msg ⇒ {"rule": "plain", "level": "info", "message": "myapp: print msg"}
# constructed DEBUG<main.go:9> no space ⇒ {"rule": "plain", "level": "info", "message": "DEBUG<main.go:9> no space"}
# constructed ERROR: myapp: a colon after the level ⇒ {"rule": "level-word", "level": "error", "message": "myapp: a colon after the level"}
time="2026/10/21 17:15:52" level=info prefix=myapp msg="info msg" k=v ⇒ {"rule": "logfmt", "level": "info", "name": "myapp", "message": "info msg"}
  k= ⇒ {"rule": "plain", "level": "info", "message": "  k="}
# constructed TRACE myapp: charm has no trace ⇒ {"rule": "level-word", "level": "trace", "message": "myapp: charm has no trace"}
# charmbracelet/log v0.4.2 styles.go: every level is MaxWidth(4), so `DEBU INFO WARN ERRO FATA`, then
# one space
# constructed 2024/01/01 10:00:00 ERRO myapp: pump stalled ⇒ {"rule": "charm", "level": "error", "name": "myapp", "message": "pump stalled", "stamp": "2024/01/01 10:00:00"}
# constructed FATA myapp: gave up ⇒ {"rule": "charm", "level": "critical", "name": "myapp", "message": "gave up"}
# constructed DEBU myapp: polling ⇒ {"rule": "charm", "level": "debug", "name": "myapp", "message": "polling"}
# constructed WARN <main.go:9> pressure low ⇒ {"rule": "charm", "level": "warn", "name": "", "file": "main.go", "line": 9, "message": "pressure low"}
# constructed ERRO pump stalled ⇒ {"rule": "plain", "level": "info", "message": "ERRO pump stalled"}
