# particle-iot/device-os v6.6.0 wiring/src/spark_wiring_logging.cpp StreamLogHandler::logMessage(): "%010u " milliseconds since boot, "[category] ", "file:line, " or "file:line: ", "func(): ", "LEVEL: ", the message
# rickkas7/DiagnosticsHelperRK README.md
0000010000 [app] INFO: cloud:stat=2 ⇒ {"rule": "particle", "level": "info", "name": "app", "device_ns": 10000000000, "message": "cloud:stat=2", "prefixed": true}
0000010000 [app] INFO: cloud:err=0 ⇒ {"rule": "particle", "level": "info", "name": "app", "device_ns": 10000000000, "message": "cloud:err=0"}
0000010000 [app] INFO: cloud:connatt=1 ⇒ {"rule": "particle", "level": "info", "name": "app", "message": "cloud:connatt=1"}
# services/src/logging.cpp log_level_name(): TRACE INFO WARN ERROR PANIC
# constructed 0000012345 [system] WARN: low battery ⇒ {"rule": "particle", "level": "warn", "name": "system", "device_ns": 12345000000, "message": "low battery"}
# constructed 0000012345 [comm.protocol] ERROR: handshake failed [code = -220] ⇒ {"rule": "particle", "level": "error", "name": "comm.protocol", "message": "handshake failed [code = -220]"}
# constructed 0000012345 [app] TRACE: loop tick ⇒ {"rule": "particle", "level": "trace", "name": "app", "message": "loop tick"}
# constructed 0000012345 [app] PANIC: out of memory ⇒ {"rule": "particle", "level": "critical", "name": "app", "message": "out of memory"}
# constructed 0000012345 [app] main.cpp:42, loop(): INFO: sensor read ⇒ {"rule": "particle", "level": "info", "name": "app", "file": "main.cpp", "line": 42, "message": "sensor read"}
# constructed 0000012345 [app] main.cpp:42: INFO: sensor read ⇒ {"rule": "particle", "level": "info", "name": "app", "file": "main.cpp", "line": 42, "message": "sensor read"}
# constructed 0000012345 [app] loop(): WARN: slow loop ⇒ {"rule": "particle", "level": "warn", "name": "app", "file": "", "line": 0, "message": "slow loop"}
# constructed 0000012345 [app] INFO: temp=21.5C ⇒ {"rule": "particle+kv", "level": "info", "name": "app", "message": "temp=21.5C", "values": [["temp", 21.5, "C"]]}
# constructed 0000012345 INFO: no category ⇒ {"rule": "particle", "level": "info", "name": "", "message": "no category"}
# constructed 4294967295 [app] INFO: last tick before the wrap ⇒ {"rule": "particle", "level": "info", "name": "app", "device_ns": 4294967295000000, "message": "last tick before the wrap"}
# constructed 0000000001 [net.ppp.client] TRACE: state 3 ⇒ {"rule": "particle", "level": "trace", "name": "net.ppp.client", "message": "state 3"}
# constructed 0000012346 [app] ERROR: write failed [code = -1, details = timeout] ⇒ {"rule": "particle", "level": "error", "name": "app", "message": "write failed [code = -1, details = timeout]"}

# without the stamp, the general layout rule reads the line
# constructed [app] INFO: no stamp ⇒ {"rule": "layout", "level": "info", "device_ns": null, "message": "no stamp"}
# constructed 000012345 [app] INFO: nine digits ⇒ {"rule": "layout", "level": "info", "device_ns": null, "message": "nine digits"}
# constructed 0000012345 [app] Info: capitalized ⇒ {"rule": "layout", "level": "info", "device_ns": null, "message": "capitalized"}
# constructed 0000012345 [app] DEBUG: other word ⇒ {"rule": "layout", "level": "debug", "device_ns": null, "message": "other word"}
# constructed 0000012345 [app]INFO: no space ⇒ {"rule": "plain", "level": "info", "message": "0000012345 [app]INFO: no space"}
# constructed 0000012345 app INFO: no brackets ⇒ {"rule": "plain", "level": "info", "message": "0000012345 app INFO: no brackets"}
# constructed 0000012345 ⇒ {"rule": "plain", "level": "info", "message": "0000012345"}
# constructed 12345 widgets INFO: inventory ⇒ {"rule": "plain", "level": "info", "message": "12345 widgets INFO: inventory"}
# constructed INFO: plain level word ⇒ {"rule": "level-word", "level": "info", "message": "plain level word"}
# constructed errors: 5 ⇒ {"rule": "plain", "level": "info", "message": "errors: 5"}
# constructed 0000012345 is the serial number ⇒ {"rule": "plain", "level": "info", "message": "0000012345 is the serial number"}
