# knurling-rs/defmt defmt-v1.2.0 decoder/src/log/format/mod.rs: DefaultStyle "{t} {L} {s}", OneLineStyle "{t} {[{L}]%bold} {s} {({c:bold} {fff}:{l:1})%dimmed}", {L} padded to 5
# firmware/defmt-test/README.md, a stamp printed by the {=u32:us} hint
0.000000 INFO  (1/2) running `assert_true`... ⇒ {"rule": "defmt", "level": "info", "name": "", "device_ns": 0, "message": "(1/2) running `assert_true`...", "prefixed": true}
0.000002 ERROR panicked at 'TODO: write actual tests', testsuite/tests/test.rs:16:9 ⇒ {"rule": "defmt", "level": "error", "name": "", "device_ns": 2000, "message": "panicked at 'TODO: write actual tests', testsuite/tests/test.rs:16:9"}
# constructed 1.234567 WARN  low battery ⇒ {"rule": "defmt", "level": "warn", "name": "", "device_ns": 1234567000, "message": "low battery"}
# the {=u64:ms} hint prints three decimals
# constructed 12.345 DEBUG spi xfer ⇒ {"rule": "defmt", "level": "debug", "name": "", "device_ns": 12345000000, "message": "spi xfer"}
# constructed 0.000100 TRACE isr ⇒ {"rule": "defmt", "level": "trace", "name": "", "device_ns": 100000, "message": "isr"}
# constructed 1.000000 INFO  rail=3.30V ⇒ {"rule": "defmt+kv", "level": "info", "name": "", "message": "rail=3.30V", "values": [["rail", 3.3, "V"]]}
# the oneline location: crate, file and line; the mod.rs doc comment shows it without a stamp
[INFO ] This is a log message (crate_name test-lib/src/lib.rs:8) ⇒ {"rule": "defmt", "level": "info", "name": "crate_name", "file": "test-lib/src/lib.rs", "line": 8, "device_ns": null, "message": "This is a log message (crate_name test-lib/src/lib.rs:8)", "body": "This is a log message"}
# constructed 1.234567 [WARN ] low battery (my_app src/main.rs:42) ⇒ {"rule": "defmt", "level": "warn", "name": "my_app", "file": "src/main.rs", "line": 42, "device_ns": 1234567000, "message": "low battery (my_app src/main.rs:42)", "body": "low battery"}
# constructed 12.345 [ERROR] bus fault (my_app src/main.rs:42) ⇒ {"rule": "defmt", "level": "error", "name": "my_app", "device_ns": 12345000000, "message": "bus fault (my_app src/main.rs:42)"}
# constructed 0.000001 [INFO ] booted ⇒ {"rule": "defmt", "level": "info", "name": "", "device_ns": 1000, "message": "booted"}
# constructed [DEBUG] sample 3 (my-app src/bin/sensor.rs:17) ⇒ {"rule": "defmt", "level": "debug", "name": "my-app", "message": "sample 3 (my-app src/bin/sensor.rs:17)", "file": "src/bin/sensor.rs", "line": 17, "body": "sample 3"}
# constructed [TRACE] tick (my_app src/main.rs:1) ⇒ {"rule": "defmt", "level": "trace", "name": "my_app", "message": "tick (my_app src/main.rs:1)", "line": 1}
# constructed [WARN ] nested (parens) kept (my_app src/main.rs:5) ⇒ {"rule": "defmt", "level": "warn", "name": "my_app", "message": "nested (parens) kept (my_app src/main.rs:5)", "body": "nested (parens) kept", "line": 5}
# a {=usize} counter and the time hints are stamps, not seconds of uptime
# constructed 7 [INFO ] counter stamp (my_app src/main.rs:9) ⇒ {"rule": "defmt", "level": "info", "device_ns": null, "name": "my_app", "message": "counter stamp (my_app src/main.rs:9)"}
# constructed 00:00:01.000000 [INFO ] time hint (my_app src/main.rs:4) ⇒ {"rule": "defmt", "level": "info", "name": "my_app", "device_ns": null, "message": "time hint (my_app src/main.rs:4)", "body": "time hint"}
# constructed 1:00:00:00.000 [WARN ] a day (my_app src/main.rs:3) ⇒ {"rule": "defmt", "level": "warn", "name": "my_app", "device_ns": null, "message": "a day (my_app src/main.rs:3)"}
# constructed 1792606444.123456 INFO  epoch microseconds ⇒ {"rule": "defmt", "level": "info", "name": "", "device_ns": null, "message": "epoch microseconds"}

# DefaultStyle without a stamp, which the level-word format reads; book/src/filtering.md
TRACE trace ⇒ {"rule": "level-word", "level": "trace", "message": "trace"}
DEBUG debug ⇒ {"rule": "level-word", "level": "debug", "message": "debug"}
INFO  info ⇒ {"rule": "level-word", "level": "info", "message": "info"}
WARN  warn ⇒ {"rule": "level-word", "level": "warn", "message": "warn"}
ERROR error ⇒ {"rule": "level-word", "level": "error", "message": "error"}
# OneLineStyle without a stamp or a location; book/src/custom-log-output.md
[DEBUG] hello ⇒ {"rule": "level-word", "level": "debug", "message": "hello"}
# the location line under a record, which -v adds
└─ test::tests::__defmt_test_entry @ tests/test.rs:7 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "└─ test::tests::__defmt_test_entry @ tests/test.rs:7"}
└─ panic_probe::print_defmt::print @ (..omitted..) ⇒ {"rule": "plain", "level": "info", "message": "└─ panic_probe::print_defmt::print @ (..omitted..)"}
# a time-of-day stamp without the location is a layout's stamp
# constructed 00:00:01.000000 INFO  time hint ⇒ {"rule": "layout", "level": "info", "device_ns": null, "message": "time hint"}
# constructed 3 ERROR flags set ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "3 ERROR flags set"}
# constructed 0.000001 info lower case ⇒ {"rule": "plain", "level": "info", "message": "0.000001 info lower case"}
# constructed 0.000001 [NOTE ] other word ⇒ {"rule": "plain", "level": "info", "message": "0.000001 [NOTE ] other word"}
# constructed 2 errors: 5 ⇒ {"rule": "plain", "level": "info", "message": "2 errors: 5"}
