{"id":13911040,"url":"https://github.com/czottmann/obsidian-logstravaganza","last_synced_at":"2026-02-15T20:13:17.970Z","repository":{"id":163119859,"uuid":"638505184","full_name":"czottmann/obsidian-logstravaganza","owner":"czottmann","description":"A simple Obsidian plugin that proxies `console.*()` calls and copies log messages and uncaught exceptions to a file in your vault.","archived":false,"fork":false,"pushed_at":"2025-12-06T17:56:13.000Z","size":126,"stargazers_count":43,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-27T13:52:07.096Z","etag":null,"topics":["logging","obsidian","obsidian-md","obsidian-plugin","pkm"],"latest_commit_sha":null,"homepage":"https://obsidian.md/plugins?id=zottmann","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/czottmann.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-05-09T13:54:15.000Z","updated_at":"2025-12-28T12:42:24.000Z","dependencies_parsed_at":"2024-11-25T22:47:34.682Z","dependency_job_id":null,"html_url":"https://github.com/czottmann/obsidian-logstravaganza","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":"obsidianmd/obsidian-sample-plugin","purl":"pkg:github/czottmann/obsidian-logstravaganza","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czottmann%2Fobsidian-logstravaganza","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czottmann%2Fobsidian-logstravaganza/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czottmann%2Fobsidian-logstravaganza/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czottmann%2Fobsidian-logstravaganza/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/czottmann","download_url":"https://codeload.github.com/czottmann/obsidian-logstravaganza/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/czottmann%2Fobsidian-logstravaganza/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29488001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["logging","obsidian","obsidian-md","obsidian-plugin","pkm"],"created_at":"2024-08-07T00:01:55.364Z","updated_at":"2026-02-15T20:13:17.953Z","avatar_url":"https://github.com/czottmann.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"# Logstravaganza\n\nThis is a plugin for [Obsidian](https://obsidian.md) that logs all console output and uncaught exceptions to a note in a vault.  **It's mainly aimed at developers.**\n\nAs such, it's also useful for letting your plugin's users help you debug your plugin's issues: Ask your customers to install this plugin, then send you the resulting log when they report a bug.\n\n\n## What it does\n\n- Intercepts and writes all `console.*()` output to a file in your vault.\n- Logs uncaught exceptions to the same file, including exceptions occurring in async code and promises (as long as they're happening in the main thread).\n- Logs can be written in several formats:\n    - [NDJSON](https://github.com/ndjson/ndjson-spec), a plain text format that can be read by humans and machines alike. Every line in the file is a JSON object. Think CSV, but with JSON.\n    - Markdown file containing a table.\n    - Markdown file containing code blocks.\n\n\n## Example output\n\nThe log output will be written to a `console-log.DEVICE-NAME.*` or, optionally, `console-log.DEVICE-NAME.2024-01-31.*` . (Here, `DEVICE-NAME` is a placeholder for the actual device name as returned by the core Sync plugin. This works whether or not Sync is activated or not.)\n\n\n### Using the NDJSON formatter\n\nOutput file name: `console-log.DEVICE-NAME.ndjson`\n\n```plaintext\n{\"timestamp\":\"2024-03-24T16:18:04.256Z\",\"level\":\"info\",\"sender\":\"plugin:logstravaganza\",\"args\":[\"[Logstravaganza] Proxy set up (v2.0.0)\"]}\n{\"timestamp\":\"2024-03-24T16:18:04.419Z\",\"level\":\"log\",\"sender\":\"plugin:actions-uri:12152:11\",\"args\":[[\"[Actions URI]\",\"Registered URI handlers:\",[\"actions-uri\",\"actions-uri/command\",\"actions-uri/command/list\",\"actions-uri/command/execute\",\"actions-uri/dataview\",\"actions-uri/dataview/table-query\",\"actions-uri/dataview/list-query\",\"actions-uri/file\",\"actions-uri/file/list\",\"actions-uri/file/get-active\",\"actions-uri/file/open\",\"actions-uri/file/delete\",\"actions-uri/file/trash\",\"actions-uri/file/rename\",\"actions-uri/folder\",\"actions-uri/folder/list\",\"actions-uri/folder/create\",\"actions-uri/folder/rename\",\"actions-uri/folder/delete\",\"actions-uri/folder/trash\",\"actions-uri/info\",\"actions-uri/note-properties\",\"actions-uri/note-properties/get\",\"actions-uri/note-properties/set\",\"actions-uri/note-properties/clear\",\"actions-uri/note-properties/remove-keys\",\"actions-uri/note\",\"actions-uri/note/list\",\"actions-uri/note/get\",\"actions-uri/note/get-first-named\",\"actions-uri/note/get-active\",\"actions-uri/note/open\",\"actions-uri/note/create\",\"actions-uri/note/append\",\"actions-uri/note/prepend\",\"actions-uri/note/touch\",\"actions-uri/note/delete\",\"actions-uri/note/trash\",\"actions-uri/note/rename\",\"actions-uri/note/search-string-and-replace\",\"actions-uri/note/search-regex-and-replace\",\"actions-uri/omnisearch\",\"actions-uri/omnisearch/all-notes\",\"actions-uri/omnisearch/open\",\"actions-uri/daily-note\",\"actions-uri/daily-note/list\",\"actions-uri/daily-note/get-current\",\"actions-uri/daily-note/get-most-recent\",\"actions-uri/daily-note/open-current\",\"actions-uri/daily-note/open-most-recent\",\"actions-uri/daily-note/create\",\"actions-uri/daily-note/append\",\"actions-uri/daily-note/prepend\",\"actions-uri/daily-note/search-string-and-replace\",\"actions-uri/daily-note/search-regex-and-replace\",\"actions-uri/weekly-note\",\"actions-uri/weekly-note/list\",\"actions-uri/weekly-note/get-current\",\"actions-uri/weekly-note/get-most-recent\",\"actions-uri/weekly-note/open-current\",\"actions-uri/weekly-note/open-most-recent\",\"actions-uri/weekly-note/create\",\"actions-uri/weekly-note/append\",\"actions-uri/weekly-note/prepend\",\"actions-uri/weekly-note/search-string-and-replace\",\"actions-uri/weekly-note/search-regex-and-replace\",\"actions-uri/monthly-note\",\"actions-uri/monthly-note/list\",\"actions-uri/monthly-note/get-current\",\"actions-uri/monthly-note/get-most-recent\",\"actions-uri/monthly-note/open-current\",\"actions-uri/monthly-note/open-most-recent\",\"actions-uri/monthly-note/create\",\"actions-uri/monthly-note/append\",\"actions-uri/monthly-note/prepend\",\"actions-uri/monthly-note/search-string-and-replace\",\"actions-uri/monthly-note/search-regex-and-replace\",\"actions-uri/quarterly-note\",\"actions-uri/quarterly-note/list\",\"actions-uri/quarterly-note/get-current\",\"actions-uri/quarterly-note/get-most-recent\",\"actions-uri/quarterly-note/open-current\",\"actions-uri/quarterly-note/open-most-recent\",\"actions-uri/quarterly-note/create\",\"actions-uri/quarterly-note/append\",\"actions-uri/quarterly-note/prepend\",\"actions-uri/quarterly-note/search-string-and-replace\",\"actions-uri/quarterly-note/search-regex-and-replace\",\"actions-uri/yearly-note\",\"actions-uri/yearly-note/list\",\"actions-uri/yearly-note/get-current\",\"actions-uri/yearly-note/get-most-recent\",\"actions-uri/yearly-note/open-current\",\"actions-uri/yearly-note/open-most-recent\",\"actions-uri/yearly-note/create\",\"actions-uri/yearly-note/append\",\"actions-uri/yearly-note/prepend\",\"actions-uri/yearly-note/search-string-and-replace\",\"actions-uri/yearly-note/search-regex-and-replace\",\"actions-uri/search\",\"actions-uri/search/all-notes\",\"actions-uri/search/open\",\"actions-uri/tags\",\"actions-uri/tags/list\",\"actions-uri/vault\",\"actions-uri/vault/open\",\"actions-uri/vault/close\",\"actions-uri/vault/info\",\"actions-uri/vault/list-all-files\",\"actions-uri/vault/list-non-notes-files\"]]]}\n{\"timestamp\":\"2024-03-24T16:18:04.530Z\",\"level\":\"time\",\"sender\":\"plugin:omnisearch:50:7444\",\"args\":[[\"Omnisearch - Indexing total time\"]]}\n{\"timestamp\":\"2024-03-24T16:18:04.530Z\",\"level\":\"log\",\"sender\":\"plugin:omnisearch:50:7571\",\"args\":[[\"Omnisearch - 66 files total\"]]}\n```\n\nObsidian won't open `.ndjson` files, even though they're basically plain text files.\n\nIn NDJSON, every line is a self-contained JSON object.  This makes it easy to read and parse with tools like `jq`. For example, the file can be filtered with `jq`:\n\n```bash\njq -r 'select(.level == \"error\")' \u003c \"console-log.DEVICE-NAME.ndjson\"\n```\n\nThis will only show the lines where the `level` is `error`. You can also stream the output of the plugin to a file and then use `jq` to filter it in real-time.\n\n```bash\ntail -f \"console-log.DEVICE-NAME.ndjson\" | jq -r 'select(.level == \"error\")'\n```\n\n\n### Using the Markdown Table formatter\n\nOutput file name: `console-log.DEVICE-NAME.md`\n\n```plaintext\n| Timestamp | Originator | Level | Message |\n| --------- | ---------- | ----- | ------- |\n| 2024-03-23T17:25:42.973Z | plugin:logstravaganza | info | \\[Logstravaganza] Proxy set up (v1.3.0) |\n| 2024-03-23T17:25:43.109Z | plugin:actions-uri:12152:11 | log | \\[\"\\[Actions URI]\",\"Registered URI handlers:\",\\[\"actions-uri\",\"actions-uri/command\",\"actions-uri/command/list\",\"actions-uri/command/execute\",\"actions-uri/dataview\",\"actions-uri/dataview/table-query\",\"actions-uri/dataview/list-query\",\"actions-uri/file\",\"actions-uri/file/list\",\"actions-uri/file/get-active\",\"actions-uri/file/open\",\"actions-uri/file/delete\",\"actions-uri/file/trash\",\"actions-uri/file/rename\",\"actions-uri/folder\",\"actions-uri/folder/list\",\"actions-uri/folder/create\",\"actions-uri/folder/rename\",\"actions-uri/folder/delete\",\"actions-uri/folder/trash\",\"actions-uri/info\",\"actions-uri/note-properties\",\"actions-uri/note-properties/get\",\"actions-uri/note-properties/set\",\"actions-uri/note-properties/clear\",\"actions-uri/note-properties/remove-keys\",\"actions-uri/note\",\"actions-uri/note/list\",\"actions-uri/note/get\",\"actions-uri/note/get-first-named\",\"actions-uri/note/get-active\",\"actions-uri/note/open\",\"actions-uri/note/create\",\"actions-uri/note/append\",\"actions-uri/note/prepend\",\"actions-uri/note/touch\",\"actions-uri/note/delete\",\"actions-uri/note/trash\",\"actions-uri/note/rename\",\"actions-uri/note/search-string-and-replace\",\"actions-uri/note/search-regex-and-replace\",\"actions-uri/omnisearch\",\"actions-uri/omnisearch/all-notes\",\"actions-uri/omnisearch/open\",\"actions-uri/daily-note\",\"actions-uri/daily-note/list\",\"actions-uri/daily-note/get-current\",\"actions-uri/daily-note/get-most-recent\",\"actions-uri/daily-note/open-current\",\"actions-uri/daily-note/open-most-recent\",\"actions-uri/daily-note/create\",\"actions-uri/daily-note/append\",\"actions-uri/daily-note/prepend\",\"actions-uri/daily-note/search-string-and-replace\",\"actions-uri/daily-note/search-regex-and-replace\",\"actions-uri/weekly-note\",\"actions-uri/weekly-note/list\",\"actions-uri/weekly-note/get-current\",\"actions-uri/weekly-note/get-most-recent\",\"actions-uri/weekly-note/open-current\",\"actions-uri/weekly-note/open-most-recent\",\"actions-uri/weekly-note/create\",\"actions-uri/weekly-note/append\",\"actions-uri/weekly-note/prepend\",\"actions-uri/weekly-note/search-string-and-replace\",\"actions-uri/weekly-note/search-regex-and-replace\",\"actions-uri/monthly-note\",\"actions-uri/monthly-note/list\",\"actions-uri/monthly-note/get-current\",\"actions-uri/monthly-note/get-most-recent\",\"actions-uri/monthly-note/open-current\",\"actions-uri/monthly-note/open-most-recent\",\"actions-uri/monthly-note/create\",\"actions-uri/monthly-note/append\",\"actions-uri/monthly-note/prepend\",\"actions-uri/monthly-note/search-string-and-replace\",\"actions-uri/monthly-note/search-regex-and-replace\",\"actions-uri/quarterly-note\",\"actions-uri/quarterly-note/list\",\"actions-uri/quarterly-note/get-current\",\"actions-uri/quarterly-note/get-most-recent\",\"actions-uri/quarterly-note/open-current\",\"actions-uri/quarterly-note/open-most-recent\",\"actions-uri/quarterly-note/create\",\"actions-uri/quarterly-note/append\",\"actions-uri/quarterly-note/prepend\",\"actions-uri/quarterly-note/search-string-and-replace\",\"actions-uri/quarterly-note/search-regex-and-replace\",\"actions-uri/yearly-note\",\"actions-uri/yearly-note/list\",\"actions-uri/yearly-note/get-current\",\"actions-uri/yearly-note/get-most-recent\",\"actions-uri/yearly-note/open-current\",\"actions-uri/yearly-note/open-most-recent\",\"actions-uri/yearly-note/create\",\"actions-uri/yearly-note/append\",\"actions-uri/yearly-note/prepend\",\"actions-uri/yearly-note/search-string-and-replace\",\"actions-uri/yearly-note/search-regex-and-replace\",\"actions-uri/search\",\"actions-uri/search/all-notes\",\"actions-uri/search/open\",\"actions-uri/tags\",\"actions-uri/tags/list\",\"actions-uri/vault\",\"actions-uri/vault/open\",\"actions-uri/vault/close\",\"actions-uri/vault/info\",\"actions-uri/vault/list-all-files\",\"actions-uri/vault/list-non-notes-files\"]] |\n| 2024-03-23T17:25:43.168Z | plugin:omnisearch:50:7444 | time | \\[\"Omnisearch - Indexing total time\"] |\n| 2024-03-23T17:25:43.168Z | plugin:omnisearch:50:7571 | log | \\[\"Omnisearch - 66 files total\"] |\n```\n\nIn reading mode, the output will be displayed as a table.\n\n\n### Using the Markdown Code Blocks formatter\n\nOutput file name: `console-log.DEVICE-NAME.md`\n\n    ```\n    time: 2024-05-06T17:31:06.874Z\n    from: plugin:logstravaganza\n    level: info\n    [Logstravaganza] Proxy set up (v2.0.1)\n    ```\n\n    ```\n    time: 2024-05-06T17:31:07.017Z\n    from: plugin:actions-uri:12152:11\n    level: log\n    [\n        \"[Actions URI]\",\n        \"Registered URI handlers:\",\n        [\n            \"actions-uri\",\n            \"actions-uri/command\",\n            \"actions-uri/command/list\",\n            \"actions-uri/command/execute\",\n            \"actions-uri/dataview\",\n    …\n            \"actions-uri/vault/list-all-files\",\n            \"actions-uri/vault/list-non-notes-files\"\n        ]\n    ]\n    ```\n\n    ```\n    time: 2024-05-06T17:31:07.098Z\n    from: plugin:omnisearch:50:7444\n    level: time\n    Omnisearch - Indexing total time\n    ```\n\n    ```\n    time: 2024-05-06T17:31:07.098Z\n    from: plugin:omnisearch:50:7571\n    level: log\n    Omnisearch - 75 files total\n    ```\n\nIn reading mode, the output will be displayed as separate MD code blocks.\n\n## Caveats\n\nNaturally, the plugin can't know about past console output.  It can only log what happens after when it's activated/enabled.\n\n**Please note:** When this plugin is active and proxying `console` calls, all output to the actual console will appear as coming from `plugin:logstravaganza`.\n\n For discussions, please visit the [Plugin Forum](https://forum.actions.work/c/logstravaganza-obsidian-plugin/8) (\"Log in with GitHub\" is enabled).\n\n\n## Bug Reports \u0026 Discussions\n\nBug reports and feature requests are welcome, feel free to [open an issue](https://github.com/czottmann/obsidian-logstravaganza/issues) here on GitHub — thank you!\n\nI've moved all plugin **discussions** to the ActionsDotWork Forum which is a hub for both my Obsidian plugins and the macOS/iOS productivity apps I'm building: [Carlo's Obsidian Plugins - ActionsDotWork Forum](https://forum.actions.work/c/obsidian-plugins/8).\n\nThe forum supports single-sign-on via GitHub, Apple and Google, meaning you can log in with your GitHub account.\n\n\n## Installation\n\n1. Search for \"Logstravaganza\" in Obsidian's community plugins browser. ([This link should bring it up.](https://obsidian.md/plugins?id=zottmann))\n2. Install it.\n3. Enable the plugin in your Obsidian settings under \"Community plugins\".\n\nThat's it.\n\n\n### Installation via \u003cabbr title=\"Beta Reviewers Auto-update Tester\"\u003eBRAT\u003c/abbr\u003e (for pre-releases or betas)\n\n1. Install [BRAT](https://github.com/TfTHacker/obsidian42-brat).\n2. Add \"Logstravaganza\" to BRAT:\n    1. Open \"Obsidian42 - BRAT\" via Settings → Community Plugins\n    2. Click \"Add Beta plugin\"\n    3. Use the repository address `czottmann/obsidian-logstravaganza`\n3. Enable \"Logstravaganza\" under Settings → Options → Community Plugins\n\n\n## Development\n\nClone the repository, run `pnpm install` OR `npm install` to install the dependencies.  Afterwards, run `pnpm dev` OR `npm run dev` to compile and have it watch for file changes.\n\n\n## Author\n\nCarlo Zottmann, \u003ccarlo@zottmann.dev\u003e, https://c.zottmann.dev/\n\nMy Obsidian plugins: https://obsidian.md/plugins?search=zottmann\n\n### Logstravaganza is brought to you by …\n\n[**Actions for Obsidian**](https://actions-for-obsidian.com?ref=github), a macOS/iOS app also made by me! AFO is the missing link between Obsidian and macOS / iOS: 50+ Shortcuts actions to bring your notes and your automations together. [Take a look!](https://actions.work/actions-for-obsidian?ref=github)\n\n\n## Contributors\n\n- [@fyears](https://github.com/fyears) ([PR#11](https://github.com/czottmann/obsidian-logstravaganza/pull/11), [PR#12](https://github.com/czottmann/obsidian-logstravaganza/pull/12))\n\n\n## Disclaimer\n\nUse at your own risk.  Things might go sideways, hard.  I'm not responsible for any data loss or damage.  You have been warned.\n\nAlways back up your data.  Seriously.\n\n\n## License\n\nMIT, see [LICENSE.md](LICENSE.md).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczottmann%2Fobsidian-logstravaganza","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fczottmann%2Fobsidian-logstravaganza","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fczottmann%2Fobsidian-logstravaganza/lists"}