You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+37-48Lines changed: 37 additions & 48 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,6 +7,10 @@ C++20 defensive log analysis CLI for Linux authentication logs, with parser cove
7
7
8
8
It parses `auth.log` / `secure`-style syslog input and `journalctl --output=short-full`-style input, normalizes authentication evidence, applies configurable rule-based detections, and emits deterministic Markdown and JSON reports.
9
9
10
+
## Project Status
11
+
12
+
LogLens is an MVP / early release. The repository is suitable for public review, local experimentation, and extension, but parser coverage and rule coverage are intentionally narrow.
13
+
10
14
## Why this project exists
11
15
12
16
Many small security tools can detect a handful of known log patterns. Fewer tools make their parsing limits visible.
@@ -25,15 +29,14 @@ LogLens is a defensive, public-safe repository.
25
29
It is intended for log parsing, detection experiments, and engineering practice.
26
30
It does not provide exploitation, persistence, credential attack automation, or live offensive capability.
27
31
28
-
29
32
## Repository Checks
30
33
31
34
LogLens includes two minimal GitHub Actions workflows:
32
35
33
36
-`CI` builds and tests the project on `ubuntu-latest` and `windows-latest`
34
37
-`CodeQL` runs GitHub code scanning for C/C++ on pushes, pull requests, and a weekly schedule
35
38
36
-
Both workflows are intended to stay stable enough to require on pull requests to `main`. The repository hardening note is in[`docs/repo-hardening.md`](./docs/repo-hardening.md).
39
+
Both workflows are intended to stay stable enough to require on pull requests to `main`. Release-facing documentation is split across [`CHANGELOG.md`](./CHANGELOG.md),[`docs/release-process.md`](./docs/release-process.md), and the repository's GitHub release notes.
37
40
38
41
## Threat Model
39
42
@@ -100,6 +103,31 @@ The CLI writes:
100
103
101
104
into the output directory you provide. If you omit the output directory, the files are written into the current working directory.
102
105
106
+
## Sample Output
107
+
108
+
For sanitized sample input, see [`assets/sample_auth.log`](./assets/sample_auth.log) and [`assets/sample_journalctl_short_full.log`](./assets/sample_journalctl_short_full.log).
109
+
110
+
`report.md` summary excerpt:
111
+
112
+
```markdown
113
+
## Summary
114
+
- Input mode: syslog_legacy
115
+
- Parsed events: 14
116
+
- Findings: 3
117
+
- Parser warnings: 2
118
+
```
119
+
120
+
`report.json` summary excerpt:
121
+
122
+
```json
123
+
{
124
+
"input_mode": "syslog_legacy",
125
+
"parsed_event_count": 14,
126
+
"finding_count": 3,
127
+
"warning_count": 2
128
+
}
129
+
```
130
+
103
131
The config file schema is intentionally small and strict:
104
132
105
133
```json
@@ -161,54 +189,15 @@ Tue 2026-03-10 08:18:05 UTC example-host sshd[2238]: Failed publickey for invali
161
189
Tue 2026-03-10 08:31:18 UTC example-host sshd[2245]: Connection closed by authenticating user alice 203.0.113.51 port 51291 [preauth]
162
190
```
163
191
164
-
## Example Output
165
-
166
-
`report.md` excerpt:
167
-
168
-
```markdown
169
-
# LogLens Report
170
-
171
-
## Summary
172
-
- Input mode: syslog_legacy
173
-
- Assume year: 2026
174
-
- Timezone present: false
175
-
- Total lines: 16
176
-
- Parsed lines: 14
177
-
- Unparsed lines: 2
178
-
- Parse success rate: 87.50%
179
-
- Parsed events: 14
180
-
- Findings: 3
181
-
- Parser warnings: 2
182
-
```
183
-
184
-
`report.json` excerpt:
185
-
186
-
```json
187
-
{
188
-
"tool": "LogLens",
189
-
"input_mode": "syslog_legacy",
190
-
"assume_year": 2026,
191
-
"timezone_present": false,
192
-
"parser_quality": {
193
-
"total_lines": 16,
194
-
"parsed_lines": 14,
195
-
"unparsed_lines": 2,
196
-
"parse_success_rate": 0.8750
197
-
},
198
-
"parsed_event_count": 14,
199
-
"finding_count": 3
200
-
}
201
-
```
202
-
203
192
## Known Limitations
204
193
205
-
-`syslog_legacy`mode requires an explicit year; LogLens no longer guesses one implicitly.
206
-
-`journalctl_short_full`parsing currently supports `UTC`, `GMT`, `Z`, and numeric timezone offsets such as `+0000` or `+00:00`, not arbitrary timezone abbreviations.
207
-
-The parser supports a small set of common `sshd`, `sudo`, and `pam_unix`patterns from `auth.log` or `secure`, not every distro-specific variant.
208
-
- Unsupported lines are surfaced as parser telemetry and warnings only; they do not generate detector findings on their own.
209
-
-`pam_unix` auth failures remain lower-confidence by default; they influence detectors only if `auth_signal_mappings`explicitly upgrades them.
210
-
- Detector thresholds and auth signal mappings are configurable only through the fixed `config.json` schema shown above; partial overrides and alternative config formats are not supported.
211
-
- Findings are intentionally rule-based and conservative; they are not attribution or incident verdicts.
194
+
-`syslog_legacy` requires an explicit year; LogLens does not guess one implicitly.
195
+
-`journalctl_short_full` currently supports `UTC`, `GMT`, `Z`, and numeric timezone offsets, not arbitrary timezone abbreviations.
196
+
-Parser coverage is intentionally narrow and focused on common `sshd`, `sudo`, and `pam_unix`variants.
197
+
- Unsupported lines are surfaced as parser telemetry and warnings, not as detector findings.
198
+
-`pam_unix` auth failures remain lower-confidence by default unless signal mappings explicitly upgrade them.
199
+
- Detector configuration uses a fixed `config.json` schema rather than partial overrides or alternate config formats.
200
+
- Findings are rule-based triage aids, not incident verdicts or attribution.
0 commit comments