logler 1.1.0__tar.gz → 1.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. {logler-1.1.0 → logler-1.1.3}/Cargo.lock +25 -26
  2. {logler-1.1.0 → logler-1.1.3}/Cargo.toml +1 -1
  3. {logler-1.1.0 → logler-1.1.3}/PKG-INFO +121 -92
  4. {logler-1.1.0 → logler-1.1.3}/README.md +118 -90
  5. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/hierarchy.rs +167 -33
  6. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/investigate.rs +10 -1
  7. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/parser.rs +40 -3
  8. {logler-1.1.0 → logler-1.1.3}/pyproject.toml +8 -2
  9. logler-1.1.3/src/logler/__init__.py +127 -0
  10. {logler-1.1.0 → logler-1.1.3}/src/logler/cli.py +19 -8
  11. {logler-1.1.0 → logler-1.1.3}/src/logler/investigate.py +31 -10
  12. {logler-1.1.0 → logler-1.1.3}/src/logler/llm_cli.py +792 -3
  13. logler-1.1.3/src/logler/models.py +527 -0
  14. {logler-1.1.0 → logler-1.1.3}/src/logler/parser.py +3 -0
  15. {logler-1.1.0 → logler-1.1.3}/src/logler/tree_formatter.py +46 -14
  16. logler-1.1.0/src/logler/__init__.py +0 -22
  17. {logler-1.1.0 → logler-1.1.3}/LICENSE +0 -0
  18. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/Cargo.toml +0 -0
  19. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/filter.rs +0 -0
  20. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/index.rs +0 -0
  21. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/lib.rs +0 -0
  22. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/reader.rs +0 -0
  23. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/stats.rs +0 -0
  24. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/thread_tracker.rs +0 -0
  25. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/trace.rs +0 -0
  26. {logler-1.1.0 → logler-1.1.3}/crates/logler-core/src/types.rs +0 -0
  27. {logler-1.1.0 → logler-1.1.3}/crates/logler-py/Cargo.toml +0 -0
  28. {logler-1.1.0 → logler-1.1.3}/crates/logler-py/src/lib.rs +0 -0
  29. {logler-1.1.0 → logler-1.1.3}/src/logler/bootstrap.py +0 -0
  30. {logler-1.1.0 → logler-1.1.3}/src/logler/cache.py +0 -0
  31. {logler-1.1.0 → logler-1.1.3}/src/logler/helpers.py +0 -0
  32. {logler-1.1.0 → logler-1.1.3}/src/logler/log_reader.py +0 -0
  33. {logler-1.1.0 → logler-1.1.3}/src/logler/safe_regex.py +0 -0
  34. {logler-1.1.0 → logler-1.1.3}/src/logler/sql.py +0 -0
  35. {logler-1.1.0 → logler-1.1.3}/src/logler/terminal.py +0 -0
  36. {logler-1.1.0 → logler-1.1.3}/src/logler/tracker.py +0 -0
  37. {logler-1.1.0 → logler-1.1.3}/src/logler/watcher.py +0 -0
@@ -253,9 +253,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5"
253
253
 
254
254
  [[package]]
255
255
  name = "cc"
256
- version = "1.2.53"
256
+ version = "1.2.54"
257
257
  source = "registry+https://github.com/rust-lang/crates.io-index"
258
- checksum = "755d2fce177175ffca841e9a06afdb2c4ab0f593d53b4dee48147dfaade85932"
258
+ checksum = "6354c81bbfd62d9cfa9cb3c773c2b7b2a3a482d569de977fd0e961f6e7c00583"
259
259
  dependencies = [
260
260
  "find-msvc-tools",
261
261
  "shlex",
@@ -520,14 +520,13 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
520
520
 
521
521
  [[package]]
522
522
  name = "filetime"
523
- version = "0.2.26"
523
+ version = "0.2.27"
524
524
  source = "registry+https://github.com/rust-lang/crates.io-index"
525
- checksum = "bc0505cd1b6fa6580283f6bdf70a73fcf4aba1184038c90902b92b3dd0df63ed"
525
+ checksum = "f98844151eee8917efc50bd9e8318cb963ae8b297431495d3f758616ea5c57db"
526
526
  dependencies = [
527
527
  "cfg-if",
528
528
  "libc",
529
529
  "libredox",
530
- "windows-sys 0.60.2",
531
530
  ]
532
531
 
533
532
  [[package]]
@@ -954,7 +953,7 @@ checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
954
953
 
955
954
  [[package]]
956
955
  name = "logler-cli"
957
- version = "1.1.0"
956
+ version = "1.1.3"
958
957
  dependencies = [
959
958
  "anyhow",
960
959
  "clap",
@@ -969,7 +968,7 @@ dependencies = [
969
968
 
970
969
  [[package]]
971
970
  name = "logler-core"
972
- version = "1.1.0"
971
+ version = "1.1.3"
973
972
  dependencies = [
974
973
  "anyhow",
975
974
  "async-stream",
@@ -984,7 +983,7 @@ dependencies = [
984
983
  "serde",
985
984
  "serde_json",
986
985
  "tempfile",
987
- "thiserror 2.0.17",
986
+ "thiserror 2.0.18",
988
987
  "tokio",
989
988
  "tokio-stream",
990
989
  "tracing",
@@ -993,7 +992,7 @@ dependencies = [
993
992
 
994
993
  [[package]]
995
994
  name = "logler-py"
996
- version = "1.1.0"
995
+ version = "1.1.3"
997
996
  dependencies = [
998
997
  "anyhow",
999
998
  "logler-core",
@@ -1005,7 +1004,7 @@ dependencies = [
1005
1004
 
1006
1005
  [[package]]
1007
1006
  name = "logler-server"
1008
- version = "1.1.0"
1007
+ version = "1.1.3"
1009
1008
  dependencies = [
1010
1009
  "anyhow",
1011
1010
  "axum",
@@ -1016,7 +1015,7 @@ dependencies = [
1016
1015
  "notify",
1017
1016
  "serde",
1018
1017
  "serde_json",
1019
- "thiserror 2.0.17",
1018
+ "thiserror 2.0.18",
1020
1019
  "tokio",
1021
1020
  "tower-http",
1022
1021
  "tracing",
@@ -1233,9 +1232,9 @@ dependencies = [
1233
1232
 
1234
1233
  [[package]]
1235
1234
  name = "proc-macro2"
1236
- version = "1.0.105"
1235
+ version = "1.0.106"
1237
1236
  source = "registry+https://github.com/rust-lang/crates.io-index"
1238
- checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
1237
+ checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
1239
1238
  dependencies = [
1240
1239
  "unicode-ident",
1241
1240
  ]
@@ -1307,9 +1306,9 @@ dependencies = [
1307
1306
 
1308
1307
  [[package]]
1309
1308
  name = "quote"
1310
- version = "1.0.43"
1309
+ version = "1.0.44"
1311
1310
  source = "registry+https://github.com/rust-lang/crates.io-index"
1312
- checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
1311
+ checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
1313
1312
  dependencies = [
1314
1313
  "proc-macro2",
1315
1314
  ]
@@ -1573,9 +1572,9 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
1573
1572
 
1574
1573
  [[package]]
1575
1574
  name = "socket2"
1576
- version = "0.6.1"
1575
+ version = "0.6.2"
1577
1576
  source = "registry+https://github.com/rust-lang/crates.io-index"
1578
- checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881"
1577
+ checksum = "86f4aa3ad99f2088c990dfa82d367e19cb29268ed67c574d10d0a4bfe71f07e0"
1579
1578
  dependencies = [
1580
1579
  "libc",
1581
1580
  "windows-sys 0.60.2",
@@ -1634,11 +1633,11 @@ dependencies = [
1634
1633
 
1635
1634
  [[package]]
1636
1635
  name = "thiserror"
1637
- version = "2.0.17"
1636
+ version = "2.0.18"
1638
1637
  source = "registry+https://github.com/rust-lang/crates.io-index"
1639
- checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
1638
+ checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
1640
1639
  dependencies = [
1641
- "thiserror-impl 2.0.17",
1640
+ "thiserror-impl 2.0.18",
1642
1641
  ]
1643
1642
 
1644
1643
  [[package]]
@@ -1654,9 +1653,9 @@ dependencies = [
1654
1653
 
1655
1654
  [[package]]
1656
1655
  name = "thiserror-impl"
1657
- version = "2.0.17"
1656
+ version = "2.0.18"
1658
1657
  source = "registry+https://github.com/rust-lang/crates.io-index"
1659
- checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
1658
+ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
1660
1659
  dependencies = [
1661
1660
  "proc-macro2",
1662
1661
  "quote",
@@ -1889,9 +1888,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1889
1888
 
1890
1889
  [[package]]
1891
1890
  name = "uuid"
1892
- version = "1.19.0"
1891
+ version = "1.20.0"
1893
1892
  source = "registry+https://github.com/rust-lang/crates.io-index"
1894
- checksum = "e2e054861b4bd027cd373e18e8d8d8e6548085000e41290d95ce0c373a654b4a"
1893
+ checksum = "ee48d38b119b0cd71fe4141b30f5ba9c7c5d9f4e7a3a8b4a674e4b6ef789976f"
1895
1894
  dependencies = [
1896
1895
  "getrandom 0.3.4",
1897
1896
  "js-sys",
@@ -2236,6 +2235,6 @@ dependencies = [
2236
2235
 
2237
2236
  [[package]]
2238
2237
  name = "zmij"
2239
- version = "1.0.14"
2238
+ version = "1.0.16"
2240
2239
  source = "registry+https://github.com/rust-lang/crates.io-index"
2241
- checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea"
2240
+ checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65"
@@ -3,7 +3,7 @@ members = ["crates/logler-py"]
3
3
  resolver = "2"
4
4
 
5
5
  [workspace.package]
6
- version = "1.1.0"
6
+ version = "1.1.3"
7
7
  edition = "2021"
8
8
  authors = ["Logler Contributors"]
9
9
  license = "MIT"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: logler
3
- Version: 1.1.0
3
+ Version: 1.1.3
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Intended Audience :: Developers
6
6
  Classifier: License :: OSI Approved :: MIT License
@@ -15,9 +15,10 @@ Requires-Dist: rich>=13.0.0
15
15
  Requires-Dist: watchdog>=4.0.0
16
16
  Requires-Dist: click>=8.1.0
17
17
  Requires-Dist: duckdb>=1.0
18
+ Requires-Dist: pydantic>=2.0
18
19
  Requires-Dist: pytest>=8.0.0 ; extra == 'dev'
19
20
  Requires-Dist: pytest-asyncio>=0.23.0 ; extra == 'dev'
20
- Requires-Dist: black>=24.0.0 ; extra == 'dev'
21
+ Requires-Dist: black>=25.0.0 ; extra == 'dev'
21
22
  Requires-Dist: ruff>=0.3.0 ; extra == 'dev'
22
23
  Requires-Dist: httpx>=0.28.0 ; extra == 'dev'
23
24
  Requires-Dist: maturin>=1.10.0 ; extra == 'dev'
@@ -50,20 +51,18 @@ Project-URL: Repository, https://github.com/gabu-quest/logler
50
51
  [![Platform](https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20windows-lightgrey)](https://pypi.org/project/logler/)
51
52
  [![GitHub stars](https://img.shields.io/github/stars/gabu-quest/logler?style=social)](https://github.com/gabu-quest/logler)
52
53
 
53
- A modern, feature-rich log viewer that makes debugging a pleasure. View logs in your terminal with beautiful colors or start a web interface with WebSocket support for real-time updates.
54
+ A modern, feature-rich log viewer that makes debugging a pleasure. View logs in your terminal with beautiful colors, or use [logler-web](https://github.com/gabu-quest/logler-web) for a modern web interface.
54
55
 
55
56
  ## ✨ Features
56
57
 
57
58
  - 🎨 **Beautiful Terminal Output** - Rich colors and formatting with thread visualization
58
- - 🌐 **Gorgeous Web UI** - Modern interface with file picker and live updates
59
59
  - 🧵 **Thread Tracking** - Follow execution flow across log entries
60
60
  - 🔗 **Correlation IDs** - Track requests across microservices
61
61
  - 📊 **Distributed Tracing** - OpenTelemetry span/trace support
62
- - ⚡ **Real-time Streaming** - WebSocket support for live log following
63
62
  - 🔍 **Smart Filtering** - By level, thread, pattern, or correlation ID
64
63
  - 📝 **Multi-Format Support** - JSON, plain text, syslog, and more
65
- - 📂 **File Picker** - Browse and select log files from the UI
66
64
  - 🎯 **Zero Config** - Works out of the box
65
+ - 🌐 **Web UI Available** - See [logler-web](https://github.com/gabu-quest/logler-web) for Vue3 + Naive-UI interface
67
66
 
68
67
  ## 🤖 NEW: LLM Investigation Engine
69
68
 
@@ -93,75 +92,116 @@ A modern, feature-rich log viewer that makes debugging a pleasure. View logs in
93
92
  - 🤔 **Explain Feature** - Plain English explanations of cryptic errors with next steps
94
93
  - 💬 **Contextual Suggestions** - AI suggests what to investigate next based on findings
95
94
 
95
+ ### Public API Contract
96
+
97
+ Each code block carries a **Contract ID** (e.g., `[C01]`). The test suite in `tests/test_readme.py` executes these snippets against the documented public APIs. When this section changes, the tests must change with it — CI proves the README.
98
+
99
+ #### [C01] Auto-insights analysis
96
100
  ```python
97
101
  import logler.investigate as investigate
98
102
 
99
- # 🎯 One-line auto investigation with insights
100
103
  result = investigate.analyze_with_insights(files=["app.log"])
101
104
  print(result['insights']) # Automatic pattern detection, error analysis, suggestions
105
+ ```
106
+
107
+ #### [C02] Token-efficient search
108
+ ```python
109
+ import logler.investigate as investigate
102
110
 
103
- # 📉 Token-efficient search (44x smaller output)
104
111
  errors = investigate.search(files=["app.log"], level="ERROR", output_format="summary")
105
112
  # Returns aggregated stats instead of all entries - perfect for limited context windows
113
+ ```
114
+
115
+ #### [C03] Compare threads
116
+ ```python
117
+ import logler.investigate as investigate
106
118
 
107
- # 🔀 Compare successful vs failed requests
108
119
  diff = investigate.compare_threads(
109
120
  files=["app.log"],
110
121
  correlation_a="req-success-123",
111
122
  correlation_b="req-failed-456"
112
123
  )
113
- print(diff['summary']) # "Thread B took 2341ms longer and had 5 errors (cache miss, timeout)"
124
+ print(diff['summary']) # Comparison of two request flows
125
+ ```
126
+
127
+ #### [C04] Cross-service timeline
128
+ ```python
129
+ import logler.investigate as investigate
114
130
 
115
- # 🌐 Cross-service distributed tracing
116
131
  timeline = investigate.cross_service_timeline(
117
132
  files={"api": ["api.log"], "db": ["db.log"], "cache": ["cache.log"]},
118
133
  correlation_id="req-12345"
119
134
  )
120
135
  # See request flow: API → DB → Cache with latency breakdown
136
+ ```
137
+
138
+ #### [C05] Investigation sessions
139
+ ```python
140
+ import logler.investigate as investigate
121
141
 
122
- # 📝 Track investigation with sessions
123
142
  session = investigate.InvestigationSession(files=["app.log"], name="incident_2024")
124
143
  session.search(level="ERROR")
125
144
  session.find_patterns()
126
145
  session.add_note("Database connection pool exhausted")
127
146
  report = session.generate_report(format="markdown") # Auto-generate report
147
+ ```
148
+
149
+ #### [C06] Smart sampling
150
+ ```python
151
+ import logler.investigate as investigate
128
152
 
129
- # 🎯 Smart sampling (representative sample of huge logs)
130
153
  sample = investigate.smart_sample(
131
154
  files=["huge.log"],
132
155
  strategy="errors_focused", # or "diverse", "representative", "chronological"
133
156
  sample_size=50
134
157
  )
158
+ ```
159
+
160
+ #### [C07] Error explanation
161
+ ```python
162
+ import logler.investigate as investigate
135
163
 
136
- # 🤔 Explain cryptic errors in plain English
137
164
  explanation = investigate.explain(error_message="Connection pool exhausted", context="production")
138
165
  print(explanation) # Common causes, next steps, production-specific advice
166
+ ```
167
+
168
+ #### [C08] Thread hierarchy
169
+ ```python
170
+ import logler.investigate as investigate
139
171
 
140
- # 🌳 Hierarchical thread visualization (NEW!)
141
172
  hierarchy = investigate.follow_thread_hierarchy(
142
173
  files=["app.log"],
143
174
  root_identifier="req-123",
144
175
  min_confidence=0.8 # Only show high-confidence relationships
145
176
  )
146
-
147
177
  # Automatic bottleneck detection
148
- if hierarchy['bottleneck']:
178
+ if hierarchy.get('bottleneck'):
149
179
  print(f"Bottleneck: {hierarchy['bottleneck']['node_id']} took {hierarchy['bottleneck']['duration_ms']}ms")
180
+ ```
150
181
 
151
- # Get summary
182
+ #### [C09] Hierarchy summary
183
+ ```python
184
+ import logler.investigate as investigate
185
+
186
+ # Using hierarchy from [C08]
152
187
  summary = investigate.get_hierarchy_summary(hierarchy)
153
188
  print(summary) # Shows tree structure, errors, bottlenecks
189
+ ```
154
190
 
155
- # Visualize in CLI
191
+ #### [C10] Tree visualization
192
+ ```python
156
193
  from logler.tree_formatter import print_tree, print_waterfall
194
+
195
+ # Using hierarchy from [C08]
157
196
  print_tree(hierarchy, mode="detailed", show_duration=True)
158
- print_waterfall(hierarchy, width=100) # Waterfall timeline showing parallel operations
197
+ print_waterfall(hierarchy, width=100) # Waterfall timeline
159
198
  ```
160
199
 
161
200
  **📚 Complete LLM documentation:**
162
- - [English Guide](docs/LLM_README.md) - Complete API and examples
201
+ - [LLM CLI Reference](docs/LLM_CLI_REFERENCE.md) - All 16 CLI commands for AI agents
202
+ - [Python API Guide](docs/LLM_README.md) - Library API and examples
203
+ - [API Reference](docs/LLM_INVESTIGATION_API.md) - All investigation functions
163
204
  - [日本語ガイド](README.ja.md) - 完全なドキュメント
164
- - [API Reference](docs/LLM_INVESTIGATION_API.md) - All investigation tools
165
205
  - [Examples](examples/) - Production incident investigations
166
206
 
167
207
  ## 🚀 Quick Start
@@ -178,21 +218,6 @@ uv pip install logler
178
218
 
179
219
  ### Usage
180
220
 
181
- **Start the web interface:**
182
- ```bash
183
- logler serve # Start with file picker
184
- logler serve app.log # Open specific file
185
- logler serve *.log # Open multiple files
186
- logler serve --open # Auto-open browser
187
- ```
188
-
189
- ### Security and path restrictions
190
-
191
- - The legacy Python web UI now enforces a **log root** to avoid accidental exposure of arbitrary files. Set `LOGLER_ROOT` to
192
- the directory you want to browse (defaults to the current working directory). Requests outside that root are rejected.
193
- - For production or remote access, place the service behind authentication/reverse proxies; the built-in UI is intended for
194
- local or trusted environments only.
195
-
196
221
  **View logs in terminal:**
197
222
  ```bash
198
223
  logler view app.log # View entire file
@@ -216,16 +241,48 @@ logler investigate app.log --errors # Analyze errors
216
241
  logler investigate app.log --patterns # Find repeated patterns
217
242
  logler investigate app.log --thread worker-1 # Follow specific thread
218
243
  logler investigate app.log --correlation req-123 # Follow correlation ID
244
+ logler investigate app.log --trace trace-abc123 # Follow distributed trace
219
245
  logler investigate app.log --output summary # Token-efficient output
220
246
 
221
247
  # 🌳 NEW: Hierarchical Thread Visualization
222
248
  logler investigate app.log --correlation req-123 --hierarchy # Show thread hierarchy tree
223
- logler investigate app.log --correlation trace-abc123 --hierarchy --waterfall # Show waterfall timeline
249
+ logler investigate app.log --trace trace-abc123 --hierarchy --waterfall # Show waterfall timeline
224
250
  logler investigate app.log --correlation req-123 --hierarchy --flamegraph # Show flamegraph view
225
251
  logler investigate app.log --hierarchy --show-error-flow # Analyze error propagation
226
252
  logler investigate app.log --thread worker-1 --hierarchy --max-depth 3 # Limit hierarchy depth
227
253
  ```
228
254
 
255
+ **LLM-first CLI (JSON output by default):**
256
+
257
+ Designed for AI agents - 16 commands with structured JSON output, no truncation.
258
+
259
+ ```bash
260
+ # Assessment & Overview
261
+ logler llm triage app.log --last 1h # Quick severity assessment
262
+ logler llm summarize app.log # Concise summary with stats
263
+ logler llm schema app.log # Infer log structure
264
+
265
+ # Search & Analysis
266
+ logler llm search app.log --level ERROR # Find entries (full results)
267
+ logler llm sql "SELECT level, COUNT(*) FROM logs GROUP BY level" -f app.log
268
+
269
+ # Request Tracing
270
+ logler llm correlate req-123 --files "*.log" # Follow correlation ID
271
+ logler llm hierarchy trace-xyz --files "*.log" # Build hierarchy tree
272
+ logler llm bottleneck trace-xyz --files "*.log" # Find slow operations
273
+
274
+ # Comparison
275
+ logler llm compare req-fail req-success --files "*.log" # Compare requests
276
+ logler llm diff app.log --baseline 1h # Before/after analysis
277
+
278
+ # Utilities
279
+ logler llm sample app.log --strategy errors_focused --size 50
280
+ logler llm context app.log 1523 --before 10 --after 10
281
+ logler llm export trace-xyz --format jaeger
282
+ ```
283
+
284
+ See **[LLM CLI Reference](docs/LLM_CLI_REFERENCE.md)** for complete documentation of all 16 commands.
285
+
229
286
  ### Visualization Modes
230
287
 
231
288
  **Tree View** - Shows parent-child relationships:
@@ -287,14 +344,6 @@ logler watch "app-*.log" -d /var/log # Specific directory
287
344
 
288
345
  ## 📸 Screenshots
289
346
 
290
- ### Web Interface
291
- Beautiful, modern web UI with file picker and real-time updates:
292
- - 📁 Browse and select log files
293
- - 🎨 Syntax-highlighted logs
294
- - 🧵 Thread visualization
295
- - 📊 Live statistics
296
- - 🔄 Real-time following with WebSocket
297
-
298
347
  ### Terminal
299
348
  Rich, colorful terminal output:
300
349
  - 🌈 Color-coded log levels
@@ -302,26 +351,10 @@ Rich, colorful terminal output:
302
351
  - 🔗 Correlation ID tracking
303
352
  - 📈 Thread timelines
304
353
 
305
- ## 🎯 Examples
306
-
307
354
  ### Web Interface
355
+ For a modern web UI, see [logler-web](https://github.com/gabu-quest/logler-web) - Vue3 + Naive-UI with real-time updates.
308
356
 
309
- ```bash
310
- # Start server and auto-open browser
311
- logler serve --open
312
-
313
- # Start with specific files
314
- logler serve /var/log/app.log /var/log/error.log
315
-
316
- # Custom host/port
317
- logler serve --host 0.0.0.0 --port 9000
318
- ```
319
-
320
- Then open your browser to `http://localhost:8000` and:
321
- 1. Click "📁 Open File" to browse log files
322
- 2. Filter by level, search, or thread
323
- 3. Click "🔄 Follow" for real-time streaming
324
- 4. View thread timelines and statistics
357
+ ## 🎯 Examples
325
358
 
326
359
  ### Terminal Viewing
327
360
 
@@ -367,6 +400,7 @@ logler investigate app.log --patterns --min-occurrences 5
367
400
  # Follow a specific thread or request
368
401
  logler investigate app.log --thread worker-1
369
402
  logler investigate app.log --correlation req-abc123
403
+ logler investigate app.log --trace trace-xyz789
370
404
 
371
405
  # Token-efficient output for LLMs
372
406
  logler investigate app.log --auto-insights --output summary
@@ -464,41 +498,34 @@ Logler automatically tracks threads and shows:
464
498
 
465
499
  **Example:**
466
500
  ```bash
467
- logler view app.log
501
+ logler view app.log --thread worker-1
468
502
  ```
469
- Shows threads in sidebar with:
470
- - Thread ID badge
471
- - Number of logs
472
- - Error count (if any)
473
503
 
474
- Click any thread to filter logs!
504
+ Filter logs by thread to trace execution flow.
475
505
 
476
506
  ## 🔗 Correlation & Tracing
477
507
 
478
508
  Track requests across services:
479
509
 
480
510
  ```bash
481
- # Logs with correlation IDs are automatically linked
482
- logler view app.log
483
- ```
511
+ # Follow a specific correlation ID
512
+ logler investigate app.log --correlation req-12345
513
+
514
+ # Follow a distributed trace ID
515
+ logler investigate app.log --trace trace-xyz789
484
516
 
485
- In the web UI:
486
- - See correlation IDs in log entries
487
- - Filter by correlation ID
488
- - View complete request flow
489
- - Track distributed traces
517
+ # View across multiple service logs
518
+ logler view app.log service.log --grep "req-12345"
519
+ ```
490
520
 
491
521
  ## ⚙️ Configuration
492
522
 
493
523
  Logler works with zero configuration, but you can customize:
494
524
 
495
525
  ```bash
496
- # Server options
497
- logler serve --host 0.0.0.0 --port 8000
498
-
499
526
  # View options
500
527
  logler view app.log --no-color # Disable colors
501
- logler view app.log -n 1000 # Show more lines
528
+ logler view app.log -n 1000 # Show more lines
502
529
  ```
503
530
 
504
531
  ## 🛠️ Development
@@ -523,11 +550,12 @@ ruff check logler
523
550
 
524
551
  - **logler** - Main CLI command
525
552
  - **Rich Terminal UI** - Beautiful colored output
526
- - **FastAPI Web Server** - Modern web interface
527
- - **WebSocket Support** - Real-time log streaming
528
553
  - **Thread Tracker** - Correlation and grouping
529
554
  - **Smart Parser** - Multi-format support
530
555
  - **File Watcher** - Monitor for new files
556
+ - **LLM Investigation Engine** - Rust-powered analysis for AI agents
557
+
558
+ For web UI, see [logler-web](https://github.com/gabu-quest/logler-web).
531
559
 
532
560
  ## 🤝 Contributing
533
561
 
@@ -541,16 +569,15 @@ MIT License - see LICENSE file for details.
541
569
 
542
570
  Built with:
543
571
  - [Rich](https://github.com/Textualize/rich) - Beautiful terminal output
544
- - [FastAPI](https://fastapi.tiangolo.com/) - Modern web framework
545
- - [HTMX](https://htmx.org/) - Dynamic web UI
546
- - [TailwindCSS](https://tailwindcss.com/) - Styling
547
- - [Alpine.js](https://alpinejs.dev/) - Reactive components
572
+ - [Click](https://click.palletsprojects.com/) - CLI framework
573
+ - [DuckDB](https://duckdb.org/) - SQL analytics
574
+ - [PyO3](https://pyo3.rs/) - Rust/Python bindings
548
575
 
549
576
  ## 💡 Pro Tips
550
577
 
551
578
  1. **Use `--follow` mode** for real-time debugging
552
579
  2. **Filter by thread** to trace execution flow
553
- 3. **Use the web UI** for complex log analysis
580
+ 3. **Use `--auto-insights`** for automatic issue detection
554
581
  4. **Export stats as JSON** for automation
555
582
  5. **Watch directories** for new log files
556
583
 
@@ -575,13 +602,15 @@ logler view app.log -f --level ERROR
575
602
  logler view app.log --thread worker-1
576
603
  ```
577
604
 
578
- ### Beautiful web dashboard
605
+ ### Investigate with insights
579
606
  ```bash
580
- logler serve app.log --open
581
- # Then explore threads, traces, and statistics!
607
+ logler investigate app.log --auto-insights
608
+ # Automatic pattern detection and issue analysis
582
609
  ```
583
610
 
584
611
  ---
585
612
 
586
613
  **Made with ❤️ for developers who love beautiful tools**
587
614
 
615
+ *For a web interface, check out [logler-web](https://github.com/gabu-quest/logler-web)*
616
+