# Monolog 3.9.0 src/Monolog/Formatter/LineFormatter.php SIMPLE_FORMAT "[%datetime%] %channel%.%level_name%: %message% %context% %extra%"
# Levels from src/Monolog/Level.php; empty context and extra print `[]`, which the message drops.
# captured: Monolog 3.9.0 on PHP 8.5
[2026-10-22T00:28:48.189688+00:00] app.db.DEBUG: debug message [] [] ⇒ {"rule": "monolog", "level": "debug", "name": "app.db", "message": "debug message"}
[2026-10-22T00:28:48.190127+00:00] app.db.INFO: info message [] [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "info message"}
[2026-10-22T00:28:48.190144+00:00] app.db.NOTICE: notice message [] [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "notice message"}
[2026-10-22T00:28:48.190155+00:00] app.db.WARNING: warning message [] [] ⇒ {"rule": "monolog", "level": "warn", "name": "app.db", "message": "warning message"}
[2026-10-22T00:28:48.190164+00:00] app.db.ERROR: error message [] [] ⇒ {"rule": "monolog", "level": "error", "name": "app.db", "message": "error message"}
[2026-10-22T00:28:48.190172+00:00] app.db.CRITICAL: critical message [] [] ⇒ {"rule": "monolog", "level": "critical", "name": "app.db", "message": "critical message"}
[2026-10-22T00:28:48.190181+00:00] app.db.ALERT: alert message [] [] ⇒ {"rule": "monolog", "level": "critical", "name": "app.db", "message": "alert message"}
[2026-10-22T00:28:48.190189+00:00] app.db.EMERGENCY: emergency message [] [] ⇒ {"rule": "monolog", "level": "critical", "name": "app.db", "message": "emergency message"}
[2026-10-22T00:28:48.190197+00:00] app.db.INFO: with context {"user":"bob","n":3} [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "with context {\"user\":\"bob\",\"n\":3}"}
[2026-10-22T00:28:48.190224+00:00] app.db.INFO: two line message [] [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "two line message"}
# Laravel's date format and its ignoreEmptyContextAndExtra, from lnav's laravel_log samples
[2025-08-31 12:34:56] local.ERROR: Something bad happened {"user_id":123,"ip":"127.0.0.1"} ⇒ {"rule": "monolog", "level": "error", "name": "local", "message": "Something bad happened {\"user_id\":123,\"ip\":\"127.0.0.1\"}"}
[2026-07-16 10:17:45] payment-systems.ERROR: Failed to process payment ⇒ {"rule": "monolog", "level": "error", "name": "payment-systems", "message": "Failed to process payment"}
# extra without context, a message that ends in brackets of its own, and an empty message
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.INFO: with extra [] {"uid":"1a2b"} ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "with extra [] {\"uid\":\"1a2b\"}"}
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.INFO: list is [] [] [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": "list is []"}
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.INFO:  [] [] ⇒ {"rule": "monolog", "level": "info", "name": "app.db", "message": ""}
# constructed [2026-10-22T00:28:48+00:00] security.WARNING: login failed [] [] ⇒ {"rule": "monolog", "level": "warn", "name": "security", "message": "login failed"}
# constructed [2026-10-22T00:28:48.190197+00:00] pump.INFO: rail=13.65V [] [] ⇒ {"rule": "monolog+kv", "level": "info", "name": "pump", "message": "rail=13.65V", "values": [["rail", 13.65, "V"]]}
# Monolog's other templates, which the layout rule reads, and lines that only look like it
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"}
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.TRACE: not a Monolog level [] [] ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[2026-10-22T00:28:48.190197+00:00] app.db.TRACE: not a Monolog level [] []"}
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.info: lower case [] [] ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[2026-10-22T00:28:48.190197+00:00] app.db.info: lower case [] []"}
# constructed [2026-10-22T00:28:48.190197+00:00] INFO: no channel [] [] ⇒ {"rule": "layout", "level": "info", "name": "", "message": "no channel [] []"}
# constructed [2026-10-22T00:28:48.190197+00:00] app.db.INFO no colon ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[2026-10-22T00:28:48.190197+00:00] app.db.INFO no colon"}
# constructed [not a date] app.db.INFO: x [] [] ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[not a date] app.db.INFO: x [] []"}
# constructed app.db.INFO: no stamp ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "app.db.INFO: no stamp"}
# constructed [2026-10-22T00:28:48.190197+00:00] the app.db.ERROR: count rose ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "[2026-10-22T00:28:48.190197+00:00] the app.db.ERROR: count rose"}
# constructed PHP Warning:  Undefined variable $x in /srv/acme/index.php on line 4 ⇒ {"rule": "plain", "level": "info", "leveled": false, "message": "PHP Warning:  Undefined variable $x in /srv/acme/index.php on line 4"}
