@aryan-vashishth/advanced-logger 0.1.0 → 0.2.0

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.
@@ -0,0 +1,302 @@
1
+ # advanced-logger: architecture (A to Z)
2
+
3
+ Package: `@aryan-vashishth/advanced-logger` (version in `package.json`).
4
+ A TypeScript logger for Playwright test projects. It is a port of the Java `core.logging` package ("VOID") with additions.
5
+ Runtime dependencies: none. `@playwright/test` is an optional peer dependency, needed only by the `/playwright` entry.
6
+
7
+ This document describes the code as it is. File and symbol names are exact. Behavior claims are backed by tests in `test/`.
8
+
9
+ ---
10
+
11
+ ## 1. What it does, in one paragraph
12
+
13
+ Test code calls `info.click('Submit')`, `warn.log('x')`, `error.table(rows)` and so on. Every call goes through one function (`dispatch` in `src/core.ts`), which builds a `LogEvent` and hands it to a list of sinks. Sinks write to the console (colored), to three plain-text trace files, optionally to a JSONL file, to an in-memory buffer (used to attach the log to a Playwright report on failure), and to any custom sink. Configuration comes from four layers (defaults, config file, env vars, `configure()` calls). Each Playwright worker is a separate process with its own logger state, writing its own files.
14
+
15
+ ## 2. Repository layout
16
+
17
+ ```
18
+ src/
19
+ index.ts public API barrel (main entry)
20
+ playwright.ts Playwright entry: `test` (with auto fixture), `expect`, `initRun`
21
+ logger.ts the four level instances: debug, info, warn, error
22
+ actions.ts LogActions class (all action methods), fields(), formatValue()
23
+ core.ts dispatch(): the single funnel; INFO truncation; themed(); test context
24
+ config.ts LogConfig, defaults, layered build, configure(), env parsing, run id
25
+ configFile.ts logger.config.* discovery, loading, validation
26
+ theme.ts LogIntent, the one built-in theme, resolveStyle()
27
+ ansi.ts escape-code factory, color catalog, stripAnsi
28
+ caller.ts stack parsing: "caller" suffix and "[CHAIN]"
29
+ sinks.ts Sink interface, built-in sinks, file writing, retention, registry
30
+ test/
31
+ logger.test.ts, logger.aggressive.test.ts core behavior (vitest)
32
+ colors.test.ts fg/bg/ansi/callerColor matrix
33
+ config-file.test.ts discovery, forms, precedence, failures
34
+ truncate.test.ts infoLogsCharLimit + its hint
35
+ retention.test.ts maxLogFiles
36
+ multi-worker.test.ts spawns real Playwright with 2 workers (fixtures/multi-worker/)
37
+ *.spec.ts, playwright*.config.ts, global-setup.ts Playwright e2e/demo specs
38
+ dist/ tsc output (CommonJS, ES2022), gitignored, what npm publishes
39
+ ```
40
+
41
+ Build: `tsc -p tsconfig.build.json` (module CommonJS, moduleResolution Node10, declarations + source maps, rootDir `src`). `prepare` runs the build on `npm install`/publish. Tests: `npm run test:unit` (vitest, `test/**/*.test.ts`), `npm run test:e2e` (Playwright, 2 workers, `test/*.spec.ts`, fixtures ignored), `npm test` runs both.
42
+
43
+ Published entry points (`package.json` `exports`):
44
+
45
+ | Import path | File | Purpose |
46
+ |---|---|---|
47
+ | `@aryan-vashishth/advanced-logger` | `dist/index.js` | `info/warn/error/debug`, `configure`, `defineConfig`, helpers |
48
+ | `@aryan-vashishth/advanced-logger/playwright` | `dist/playwright.js` | drop-in `test`/`expect` with logging fixture |
49
+
50
+ ## 3. Module dependency graph
51
+
52
+ ```
53
+ index.ts ──► logger ──► actions ──► core ──► caller
54
+ │ │ ├────► sinks
55
+ │ │ └────► theme
56
+ ├──► config ◄──────────────┐
57
+ └──► theme, ansi │
58
+ config ──► configFile (runtime) theme ──► config (runtime, reads fg/bg)
59
+ config ──► theme (type only) configFile ──► config (types only)
60
+ sinks ──► config, theme, ansi caller ──► config (type only)
61
+ playwright ──► config, core, sinks, logger
62
+ ```
63
+
64
+ Two potential cycles are deliberately broken with `import type`: `config.ts` imports only the *type* `LevelName` from `theme.ts`, and `configFile.ts` imports only *types* from `config.ts`. `theme.ts` imports `config()` at runtime (to read `fg`/`bg`). Do not add runtime imports in the other direction.
65
+
66
+ ## 4. The call path (the most important flow)
67
+
68
+ ```
69
+ info.click('Submit') actions.ts LogActions.click
70
+ └► this.msg(LogIntent.INTERACTION, 'CLICK [>]', m)
71
+ └► dispatch('INFO', intent, themed(level,intent), label, str(m)) core.ts
72
+ 1. cfg = config() (lazy build on first call, see §6)
73
+ 2. INFO truncation branch (see §9) may emit 3 events and return
74
+ 3. emit(...):
75
+ a. sinks = activeSinks().filter(s => s.accepts(level, cfg))
76
+ b. if none accept: return (no stack is ever captured)
77
+ c. resolveCaller(cfg) caller.ts: parse new Error().stack
78
+ d. build LogEvent {time, ts, level, intent, label, message, color,
79
+ caller, chain, worker, test}
80
+ e. for each sink: try { sink.write(ev, cfg) } catch -> one stderr line
81
+ ```
82
+
83
+ Key properties:
84
+
85
+ - **Single funnel.** Everything (actions, tables, trees, Playwright fixture banner lines) ends in `dispatch`. Cross-cutting features (truncation) live there.
86
+ - **Cheap rejection first.** `Sink.accepts(level, cfg)` runs before any stack capture, which is the expensive part. If the root level hides the line and file sinks are off, no stack is captured.
87
+ - **A logger never fails a test.** A throwing sink is caught and reported once per call on stderr. The one deliberate exception is a broken config file (see §7), which throws.
88
+ - **Color is baked at call time.** `themed()` computes the escape prefix when the action is called and stores it in `LogEvent.color`. Sinks do not recompute it.
89
+
90
+ ### Level instances and actions
91
+
92
+ `logger.ts` exports four `LogActions` instances: `debug`, `info`, `warn`, `error`. `LogActions` (`actions.ts`) has one method per action, each a thin wrapper `this.msg(intent, label, message)`:
93
+
94
+ | Intent | Methods (label) |
95
+ |---|---|
96
+ | INTERACTION | click, checkbox, text, input, dropdown, toggle, upload, hover, clear, key, password (masked) |
97
+ | NAVIGATION | navigate, tab, frame, breadcrumb |
98
+ | OBSERVE | wait, search, result |
99
+ | VERIFY | verifying |
100
+ | SUCCESS | success, complete, resolved |
101
+ | ALERT | error, failed, timeout, validation, fallback, skip |
102
+ | DATA | grid, table, row |
103
+ | BASE | log, tree |
104
+
105
+ Composite methods:
106
+
107
+ - `log(...)` is overloaded: string; object/array/map (table or indexed list); `(heading, fields)` or `(heading, k, v, ...)` (tree); `(heading, value)`.
108
+ - `table(rows, title?)` renders an ASCII table through `renderTable`, then calls `dispatch(level, null, color, 'TABLE', ...)` with **intent `null`** (a pre-colored block). `table("text")` is just a TABLE line.
109
+ - `row`, `tree`, `resolved` emit several `msg()` lines (one `dispatch` each).
110
+ - Redaction: values whose key contains any of `redactKeys` (case-insensitive substring) print as `***` in tree/table/row.
111
+ - Malformed arguments never throw (`safeFields` keeps a dangling key under `(unpaired)`); `fields()` itself throws on an odd count by design.
112
+
113
+ ## 5. The event model
114
+
115
+ ```ts
116
+ interface LogEvent {
117
+ time: Date; ts: string; // ts is pre-formatted via cfg.tsFormat
118
+ level: 'DEBUG'|'INFO'|'WARN'|'ERROR';
119
+ intent: LogIntent | null; // null = pre-colored block (table)
120
+ label: string; // e.g. 'CLICK [>]', 'INFO', 'TABLE'
121
+ message: string; // may be multi-line
122
+ color: string; // resolved ANSI prefix; '' means none
123
+ caller: string; // "Callee.method ← Caller.method", plain text
124
+ chain: string; // in-project call chain, leaf first, plain text
125
+ worker: string; // 'w<TEST_WORKER_INDEX>' or 'main'
126
+ test?: string; // set by the Playwright fixture
127
+ }
128
+ interface Sink { accepts(level, cfg): boolean; write(ev, cfg): void }
129
+ ```
130
+
131
+ Rendered line shape: `<ts> │ <label> │ <message line>` where `│` is `cfg.segmentDivider`. Multi-line messages are split on a Java-`\R`-equivalent regex (`LINE_BREAKS`) and each line gets its own prefix.
132
+
133
+ ## 6. Configuration
134
+
135
+ ### 6.1 `LogConfig` (every option)
136
+
137
+ | Option | Type / default | Meaning |
138
+ |---|---|---|
139
+ | `level` | `'debug'\|'info'\|'warn'\|'error'\|'off'`, `info` | Root threshold for console + partial-trace |
140
+ | `ansi` | bool, auto-detected | Master color switch. `false` overrides `fg`, `bg`, `callerColor` |
141
+ | `fg` | bool, `true` | Foreground colors (intent color; level color on BASE lines; bold) |
142
+ | `bg` | bool, `true` | The theme background (one constant, `BG_BLACK`, for all levels) |
143
+ | `callerColor` | bool, `false` | Color the caller suffix separately (console, debug level). Independent of fg/bg |
144
+ | `infoLogsCharLimit` | number\|null, `null` | INFO truncation limit (§9). null/0 = off |
145
+ | `maxLogFiles` | number\|null, `null` | Retention per trace kind (§10). null/0 = off |
146
+ | `tsFormat` | string\|fn, `yyyy-MM-dd HH:mm:ss.SSS` | Java-style pattern or `(Date)=>string` |
147
+ | `segmentDivider` | string, `' │ '` | Column separator |
148
+ | `tableCellLimit`, `tableCellLimitEnabled` | 40, false | Truncate table/row cells |
149
+ | `suppressContains`, `suppressMethodPrefixes`, `includeOnlyPrefixes` | Sets | Caller/chain frame filters (§8) |
150
+ | `projectRoots` | string[], `[cwd]` | Frames under these form the `[CHAIN]` |
151
+ | `console` | bool, true | Console sink on/off |
152
+ | `files` | `{debugTrace, partialTrace, fullTrace, jsonl}` | Per-file toggles (jsonl default false) |
153
+ | `logDir` | string, `./logs` | Output root |
154
+ | `githubAnnotations` | bool, `GITHUB_ACTIONS==='true'` | Emit `::error::`/`::warning::` lines |
155
+ | `redactKeys` | string[] | Keys masked in structured output |
156
+ | `attach` | `'on-failure'\|'always'\|'never'` | Playwright attachment policy |
157
+
158
+ `LogConfigPatch` = `Partial<LogConfig>` with the Set-typed fields accepting any iterable and `files` partial. It is the type `configure()` and config files accept.
159
+
160
+ ### 6.2 Layers and precedence (lowest to highest)
161
+
162
+ 1. **Built-in defaults**: `builtinDefaults(env)` in `config.ts`. Only terminal/CI heuristics for `ansi` and `GITHUB_ACTIONS` for annotations read the environment here.
163
+ 2. **Config file** (`logger.config.*`, §7).
164
+ 3. **Environment variables**: `applyEnv()`.
165
+ 4. **`configure()` calls** in code mutate the live object afterwards, so they always win.
166
+
167
+ Environment variables: `VOID_LOG_LEVEL`, `VOID_LOG_DIR`, `VOID_LOG_ANSI`, `VOID_LOG_FG`, `VOID_LOG_BG`, `VOID_LOG_JSONL`, `VOID_LOG_INFO_LOGS_CHAR_LIMIT`, `VOID_LOG_MAX_FILES`, `VOID_LOG_CONFIG`, `VOID_RUN_ID`, `VOID_RUN_DATE`, plus `NO_COLOR` / `FORCE_COLOR`. Booleans: `1/true/yes/on` true, anything else non-empty false. An invalid level or non-numeric limit is ignored (so it cannot override a lower layer). `NO_COLOR`/`FORCE_COLOR` count as env-level (they beat `ansi` in a file); terminal auto-detection counts as default-level (the file beats it). See `explicitAnsi()` vs `heuristicAnsi()`.
168
+
169
+ ### 6.3 Lazy, per-process state
170
+
171
+ `config.ts` holds module state `CURRENT: LogConfig | undefined`.
172
+
173
+ - `config()` returns `CURRENT ?? build()`. The first call in a process builds the config (including reading the config file). Every process, including each Playwright worker, does this independently.
174
+ - `build()` sets `CURRENT = cfg` early as a **re-entrancy guard**: a config file that imports this package and touches `config()` while loading sees the defaults instead of recursing. On failure it sets `CURRENT = undefined` and rethrows, so every later call throws again (no silent fallback to defaults).
175
+ - `configure(patch | fn)`, the `enable*/disable*` mutators, and every internal reader go through `config()`, so they trigger the load first. Therefore a `configure()` call made before any log call still sits above the file.
176
+ - `resetConfig()` clears `CURRENT`, forgets the cached config file (`forgetConfigFile()` deletes it from `require.cache`), and rebuilds. Used by tests.
177
+ - A mutable `LIMIT_SOURCE` records which layer set `infoLogsCharLimit` (`default|file|env|code`) for the truncation hint.
178
+
179
+ **Process model consequence** (verified by `multi-worker.test.ts`): `configure()` inside Playwright's `globalSetup` runs in the runner process and does **not** reach workers. Only env vars are inherited. That is why `initRun()` communicates through `process.env.VOID_RUN_ID`/`VOID_RUN_DATE`, and why the config file exists.
180
+
181
+ ## 7. Config file loading (`configFile.ts`)
182
+
183
+ - Discovery in `process.cwd()`: `logger.config.ts`, `.js`, `.cjs`, `.json`, first existing wins (`CONFIG_FILE_NAMES`). No file: silently fine, behavior identical to 0.1.0.
184
+ - `VOID_LOG_CONFIG` overrides the path (resolved against cwd). An explicit path that does not exist **throws** (deliberate: a typo should not be silent).
185
+ - Loaded with a lazy `require(file)` inside `loadConfigFile`. Under Playwright, its TypeScript hook transpiles `.ts`; under plain Node, type stripping or CJS handles it. No transpiler dependency. `unwrapDefault` handles `__esModule` interop (`export default`), `module.exports =`, and JSON.
186
+ - Forms: a plain object (`LogConfigPatch`) or `(config: LogConfig) => LogConfigPatch`. The function receives a **clone** of the defaults (`cloneConfig`), so it cannot mutate live state. `defineConfig()` is an identity helper for typing.
187
+ - Validation (`validatePatch`, table `KEYS`): unknown option names throw (catches typos like `levl`), wrong types throw, `undefined` values are dropped, `files` sub-keys are checked. Every error message contains the absolute file path (`fail()`), wrapping the original in `cause`.
188
+ - Loaded once per process (Node's require cache plus `CURRENT`). `loadedConfigFile()` exposes the path for messages.
189
+
190
+ ## 8. Caller and chain resolution (`caller.ts`)
191
+
192
+ Parses `new Error().stack` (limit raised to 60 temporarily) with `FRAME_RE`. `displayName()` turns frames into readable names:
193
+
194
+ - `Class.method` when V8 reports a type (instance, static, async, class-field arrow all verified); `Class.(constructor)` for `new`.
195
+ - Free functions and plain-object types (`Object`, `Module`, `Function`, ...) become `<fileBase>.<function>`.
196
+ - Frames inside the logger's own folder (`SELF_DIR`, computed at load from this file's path) are always dropped. This replaces the Java logger's method-name-prefix suppression, so user methods like `login()` are not hidden.
197
+
198
+ Two outputs:
199
+
200
+ - `caller`: first surviving frame is the callee, the next frame with a different display name is the caller: `Callee ← Caller`.
201
+ - `chain`: every surviving frame under `projectRoots` (excluding `node_modules`/`node:`), consecutive duplicates collapsed, leaf first, joined by ` ← `.
202
+
203
+ Filters: `suppressMethodPrefixes`, `includeOnlyPrefixes` (path or display prefix), `suppressContains` (default `node_modules`, `node:`, `<anonymous>`).
204
+
205
+ If the chain comes out empty, `projectRoots` does not cover the test code; set `configure({ projectRoots: [__dirname] })`.
206
+
207
+ ## 9. Output sinks (`sinks.ts`)
208
+
209
+ `activeSinks()` returns, in order: console, partial-trace, debug-trace, full-trace, jsonl, capture, then custom sinks (`addSink`/`removeSink`).
210
+
211
+ | Sink | accepts | Content |
212
+ |---|---|---|
213
+ | console | `cfg.console` and level ≥ root | Colored line; caller suffix only when root level is `debug` |
214
+ | partial-trace | file toggle and level ≥ root | Same lines as console, plain text |
215
+ | debug-trace | file toggle, **all levels** | Plain text + caller suffix |
216
+ | full-trace | file toggle, **all levels** | Plain text + `[CHAIN] <chain>` suffix |
217
+ | jsonl | `files.jsonl` | One JSON record per event (opt-in) |
218
+ | capture | an active capture exists and level ≥ root | In-memory lines for the Playwright attachment |
219
+
220
+ Files: `<logDir>/<runDate>/<kind>/<kind>-<runId>-<worker>.log` (`traceFilePath`). Writes are **synchronous** (`fs.writeSync` on cached fds in `FD_CACHE`), one file per worker, so parallel workers never interleave and a crash loses nothing. Every file line is prefixed `w<N> │ ` and passes through `stripAnsi`, so **plain-text sinks never contain escape codes** regardless of color flags. `closeAllFiles()` closes fds (and clears prune bookkeeping).
221
+
222
+ Console rendering (`consoleSink`):
223
+ - `ansi` off: plain.
224
+ - `ansi` on: `wrap(s) = ev.color ? ev.color + s + RESET : s`. When `fg` and `bg` are both off, `ev.color` is `''` and the body is bare (no stray reset).
225
+ - `callerColor` on and a caller exists: body wrapped, then `div + CALLER_FG + caller + RESET`. Not gated by `fg`/`bg`; only `ansi:false` silences it.
226
+ - `githubAnnotations`: after each line, `::error::`/`::warning::` for ERROR/ALERT/WARN events.
227
+
228
+ ## 10. Color model (`theme.ts`, `ansi.ts`)
229
+
230
+ One built-in theme (HIGH_CONTRAST). `resolveStyle(level, intent)` = foreground + background:
231
+
232
+ - Foreground: for `BASE` intent, `LEVEL_FG[level]` (white, amber, red, grey, all bold); otherwise `INTENT_FG[intent]`.
233
+ - Background: constant `BG_BLACK` for every level (there is no per-level background).
234
+ - `config().fg` false drops the foreground part; `config().bg` false drops the background; both false returns `''`.
235
+ - `themed(level, intent)` in `core.ts` returns `''` when `ansi` is off, else `resolveStyle`.
236
+ - Tables build their own bold/reset around the title; those are emitted only when a style exists and `fg` is on (bold belongs to the foreground).
237
+
238
+ `ansi.ts` is a catalog and factory (`sgr`, `fg16`, `rgbFg`, ... named `FG_*`, `BG_*`, `RGB_FG`, ...), plus `stripAnsi` and `fgFromStyle`.
239
+
240
+ ## 11. INFO truncation (`infoLogsCharLimit`, in `dispatch`)
241
+
242
+ Condition: `level==='INFO'`, `intent !== null` (tables excluded; they have `tableCellLimit`), limit > 0, message longer than the limit, and INFO is visible at the root level (otherwise nothing is truncated or warned, since the traces already hold the full text).
243
+
244
+ Then three events are emitted via `emit()`:
245
+
246
+ 1. INFO, original label: `message.slice(0, limit) + '... (<total> chars)'`
247
+ 2. WARN, label `WARN`: `INFO log exceeded the <limit> char threshold (<total> chars). Refer to the debug logs to see the full text. <hint>`
248
+ 3. DEBUG, same label (a plain `log` line's `INFO` label becomes `DEBUG`), full text.
249
+
250
+ `infoLimitHint()` (in `config.ts`) tells the reader what to edit, depending on `LIMIT_SOURCE`: the config file's absolute path, the env var name, or the `configure()` call.
251
+
252
+ ## 12. Log file retention (`maxLogFiles`, in `sinks.ts`)
253
+
254
+ `pruneOnce(cfg, kind)` runs after the first write of each kind in a process (guarded by `PRUNED`). It lists `<logDir>/*/<kind>/<kind>-*.(log|jsonl)`, never deletes files whose name contains the current run id (parallel workers share it), keeps the newest by mtime up to `maxLogFiles - currentRunFiles`, deletes the rest, and removes emptied folders. Best effort; all errors swallowed. Counted per kind across all dates, in files (not runs).
255
+
256
+ ## 13. Run identity and workers (`config.ts`)
257
+
258
+ - `initRun()` (call from `globalSetup`) sets `process.env.VOID_RUN_ID` and `VOID_RUN_DATE` if absent, so every worker (which inherits env) shares one run id. `getRun()` falls back to a per-process id if unset.
259
+ - `workerLabel()` is `w<TEST_WORKER_INDEX>` under Playwright, else `main`. It appears in file names, line prefixes and events.
260
+
261
+ ## 14. Playwright integration (`playwright.ts`)
262
+
263
+ `test = base.extend({ voidLog: [fn, { auto: true }] })`: an auto fixture active for every test. Per test it: sets the test context (`setTestContext`, tags JSONL records), starts a `captureLogs()` buffer, logs `TEST START`, runs the test, then logs `TEST END | status | ms` (`error.failed` on failure, `info.success` otherwise), and attaches the captured text as `void-log` per `cfg.attach` (`on-failure` default). It also re-exports `expect` and `initRun`. Tests import `test`/`expect` from this entry instead of `@playwright/test`.
264
+
265
+ ## 15. Extension points
266
+
267
+ - **Custom sink**: `addSink({ accepts(level,cfg){...}, write(ev,cfg){...} })`. Receives the same `LogEvent`; `ev.color` is ANSI, strip it for plain output.
268
+ - **In-memory capture**: `captureLogs()` returns `{ text(), stop() }`.
269
+ - **New action**: add a method in `LogActions` calling `this.msg(intent, label, m)`. For a new intent, add it to `LogIntent` and `INTENT_FG` in `theme.ts`.
270
+ - **New config option**: add to `LogConfig` and `builtinDefaults`; add to the `KEYS` table in `configFile.ts` (validation); optionally an env var in `applyEnv`; document in README; add tests. `LogConfigPatch` updates automatically.
271
+
272
+ ## 16. Invariants and gotchas (read before changing code)
273
+
274
+ 1. Everything goes through `dispatch`. Do not write to sinks directly.
275
+ 2. Do not capture a stack before `accepts()` has approved at least one sink.
276
+ 3. `config.ts` <-> `theme.ts`/`configFile.ts` cycles are avoided with `import type`. Keep it that way.
277
+ 4. File sinks must stay escape-free: they rely on `stripAnsi` at write time.
278
+ 5. `intent === null` means "pre-colored block" (tables). Truncation and `callerColor` logic assume this.
279
+ 6. `configure()` must go through `config()` so the config file is loaded first; never touch `CURRENT` directly elsewhere.
280
+ 7. A bad config file must keep throwing (no silent fallback). `build()` resets `CURRENT` on failure for this reason.
281
+ 8. Files are written synchronously on purpose; do not buffer.
282
+ 9. The default theme/`fg`/`bg` defaults must keep 0.1.0 output byte-identical.
283
+ 10. Config is built lazily at first use (not at import). An env var changed between import and the first log call is honored; this is the one intentional difference from 0.1.0.
284
+ 11. In regexes written inside template literals, escape backslashes (`\\.`); a past bug came from exactly this.
285
+
286
+ ## 17. Differences from the Java logger
287
+
288
+ Dropped: custom themes, `setTheme`, width/arrow settings, file rotation and gzip archives. Changed: caller frames are excluded by path rather than method-name prefix. Added: secret redaction, JSONL sink, custom sinks, in-memory capture, Playwright fixture with attachment, per-worker files, config file, `fg`/`bg`, INFO truncation, file retention.
289
+
290
+ ## 18. Testing map
291
+
292
+ | Behavior | Test file |
293
+ |---|---|
294
+ | Console/file output, levels, caller/chain, redaction, malformed input | `logger.test.ts`, `logger.aggressive.test.ts` |
295
+ | fg/bg/ansi/callerColor combinations across all actions, env parsing | `colors.test.ts` |
296
+ | Discovery order, forms, precedence, `VOID_LOG_CONFIG`, loud failures | `config-file.test.ts` |
297
+ | Truncation text, WARN/DEBUG lines, hint by source | `truncate.test.ts` |
298
+ | Retention counting, protection of current run, foreign files | `retention.test.ts` |
299
+ | Real Playwright, 2 workers, `.ts` config, `globalSetup` isolation | `multi-worker.test.ts` + `fixtures/multi-worker/` |
300
+ | Visual/e2e demos | `*.spec.ts` via `test/playwright.config.ts` |
301
+
302
+ Tests use `resetConfig()` plus `configure({ logDir: tmp, ansi: false, tsFormat: () => 'TS' })` for deterministic output, and spy on `process.stdout.write`. Config-file tests `chdir` into a temp dir so no stray `logger.config.*` leaks in.
package/README.md CHANGED
@@ -3,7 +3,66 @@
3
3
  Self-contained TypeScript port of the VOID `core.logging` package, for Playwright projects.
4
4
  No runtime dependencies other than `@playwright/test` (optional, only needed for the `@aryan-vashishth/advanced-logger/playwright` entry).
5
5
 
6
- Install it as a package (`npm install <path-or-git-url-to-this-repo>`), or copy `src/` directly into your own project (for example `src/logger/`) and import by relative path if you'd rather not take a dependency.
6
+ ## Installation
7
+
8
+ Published on npm as [`@aryan-vashishth/advanced-logger`](https://www.npmjs.com/package/@aryan-vashishth/advanced-logger). No registry login or token is needed, because the package is public.
9
+
10
+ ```bash
11
+ npm install @aryan-vashishth/advanced-logger
12
+ ```
13
+
14
+ Pin an exact version if you want reproducible installs:
15
+
16
+ ```bash
17
+ npm install @aryan-vashishth/advanced-logger@0.2.0
18
+ ```
19
+
20
+ Requirements:
21
+
22
+ - TypeScript types are bundled (`dist/*.d.ts`). The compiled output targets ES2022, and it is tested on Node 24.
23
+ - For the Playwright entry, `@playwright/test` >= 1.40.0 must be installed in your project (it is an optional peer dependency).
24
+
25
+ Check the installed version with `npm ls @aryan-vashishth/advanced-logger`, and update with `npm update @aryan-vashishth/advanced-logger`.
26
+
27
+ ### Entry points
28
+
29
+ | Import | Use |
30
+ |---|---|
31
+ | `@aryan-vashishth/advanced-logger` | `info`, `warn`, `error`, `debug`, `fields`, `configure`, ... for page objects and helpers |
32
+ | `@aryan-vashishth/advanced-logger/playwright` | Drop-in `test` / `expect` that tag each test, print a banner and attach the log on failure |
33
+
34
+ ### Quick start in a Playwright project
35
+
36
+ 1. Install the package (above).
37
+ 2. Create `global-setup.ts` so all workers share one run id:
38
+
39
+ ```ts
40
+ import { initRun } from '@aryan-vashishth/advanced-logger';
41
+ export default async () => { initRun(); };
42
+ ```
43
+
44
+ 3. Reference it in `playwright.config.ts`: `globalSetup: './global-setup.ts'`.
45
+ 4. In specs, import `test` and `expect` from `@aryan-vashishth/advanced-logger/playwright` instead of `@playwright/test`.
46
+ 5. Run your tests. Logs are written under `./logs/<date>/` (change with `VOID_LOG_DIR`).
47
+
48
+ If the caller chain (`[CHAIN]` in `full-trace`) comes out empty, set the project root explicitly. It defaults to the working directory:
49
+
50
+ ```ts
51
+ import { configure } from '@aryan-vashishth/advanced-logger';
52
+ configure({ projectRoots: [__dirname] });
53
+ ```
54
+
55
+ ### Uninstall or migrate from a git install
56
+
57
+ ```bash
58
+ npm uninstall @aryan-vashishth/advanced-logger
59
+ ```
60
+
61
+ If you previously installed from the GitHub URL, remove that dependency entry first so the lockfile stops recording `git+ssh://` addresses, then install from npm as shown above.
62
+
63
+ You can also copy `src/` into your own project (for example `src/logger/`) and import by relative path if you would rather not take a dependency.
64
+
65
+ ## Usage
7
66
 
8
67
  ```ts
9
68
  // tests: import test/expect from the Playwright entry so every test is tagged, bannered and its log attached on failure
@@ -34,11 +93,99 @@ Files are written synchronously, one per Playwright worker (`...-w<index>.log`),
34
93
 
35
94
  ## Configuration
36
95
 
37
- Environment: `VOID_LOG_LEVEL` (debug/info/warn/error/off), `VOID_LOG_DIR`, `VOID_LOG_ANSI`, `VOID_LOG_JSONL`, `VOID_RUN_ID`, plus standard `NO_COLOR` / `FORCE_COLOR`.
38
- Code: `configure({ level, ansi, callerColor, tsFormat, segmentDivider, tableCellLimit, tableCellLimitEnabled, files, console, redactKeys, attach, ... })`.
96
+ Environment: `VOID_LOG_LEVEL` (debug/info/warn/error/off), `VOID_LOG_DIR`, `VOID_LOG_ANSI`, `VOID_LOG_FG`, `VOID_LOG_BG`, `VOID_LOG_JSONL`, `VOID_LOG_INFO_LOGS_CHAR_LIMIT`, `VOID_LOG_MAX_FILES`, `VOID_LOG_CONFIG`, `VOID_RUN_ID`, plus standard `NO_COLOR` / `FORCE_COLOR`. Boolean variables accept `1/true/yes/on` and `0/false/no/off`.
97
+ Code: `configure({ level, infoLogsCharLimit, maxLogFiles, ansi, fg, bg, callerColor, tsFormat, segmentDivider, tableCellLimit, tableCellLimitEnabled, files, console, redactKeys, attach, ... })`.
39
98
 
40
99
  The single theme (HIGH_CONTRAST) is on when ANSI is on: `enableAnsi()` / `disableAnsi()`.
41
100
 
101
+ ### Config file
102
+
103
+ Put a `logger.config.ts` (or `.js`, `.cjs`, `.json`) in the project root, which is `process.cwd()`. The first one found, in that order, is loaded once per process, the first time the logger is used. Every Playwright worker is its own process, so every worker reads it.
104
+
105
+ ```ts
106
+ // logger.config.ts
107
+ import { defineConfig } from '@aryan-vashishth/advanced-logger';
108
+
109
+ export default defineConfig({
110
+ level: 'debug',
111
+ fg: true,
112
+ bg: false,
113
+ redactKeys: ['password', 'token', 'pin'],
114
+ files: { jsonl: true },
115
+ projectRoots: [__dirname],
116
+ });
117
+ ```
118
+
119
+ The default export is either a plain object (the same shape `configure()` accepts) or a function `(config) => patch`. The function receives a copy of the built-in defaults and returns a patch. `defineConfig()` only adds typing, and its type is exactly `LogConfigPatch`.
120
+
121
+ Precedence, lowest to highest:
122
+
123
+ 1. Built-in defaults
124
+ 2. Config file
125
+ 3. Environment variables (`VOID_LOG_*`, `NO_COLOR`, `FORCE_COLOR`)
126
+ 4. Explicit `configure()` calls in code
127
+
128
+ Notes:
129
+
130
+ - `configure()` inside Playwright's `globalSetup` does **not** reach the workers. `globalSetup` runs in the runner process, and each worker is a separate process with its own logger state. Only environment variables are inherited by workers (that is how `initRun()` shares the run id). A config file does reach them.
131
+ - Set `VOID_LOG_CONFIG` to use a different path (absolute, or relative to the working directory). Unlike the default lookup, an explicit path that does not exist is an error.
132
+ - No file at all is fine and changes nothing. A file that exists but throws, has the wrong shape, an unknown option name (for example a typo such as `levl`) or a wrongly typed value fails with an error that names the file. It keeps failing on every use until fixed.
133
+ - TypeScript files are loaded with `require()`, so Playwright's own transpiler (or Node's type stripping) handles them. Use `.js`, `.cjs` or `.json` if your runner cannot load `.ts`. There is no runtime dependency.
134
+ - An invalid `VOID_LOG_LEVEL` is ignored, so it never overrides the config file.
135
+ - `NO_COLOR` and `FORCE_COLOR` count as environment variables, so they beat `ansi` in the file. Terminal auto-detection does not: the file beats it.
136
+
137
+ ### Limiting how many log files are kept: maxLogFiles
138
+
139
+ `maxLogFiles: 20` (or `VOID_LOG_MAX_FILES=20`) keeps at most 20 files in each of `partial-trace`, `debug-trace`, `full-trace` and `jsonl`, counted across all date folders. Older files (by modification time) are deleted, and date folders left empty are removed. Unset, `null` or `0` keeps everything (the default; an env value of `0` turns off a limit set in the config file).
140
+
141
+ - The unit is files, not runs. Each run writes one file per Playwright worker, so with 4 workers a limit of 20 holds about 5 runs.
142
+ - Files of the current run are never deleted, because parallel workers share one run id. If a run has more workers than the limit, that run's files exceed it.
143
+ - Cleanup runs once per process, per kind, right after the first write, and is best effort: a failure never reaches your test. Only files named like this logger's output (`<kind>-*.log` / `.jsonl`) are touched, so other files in the log folder are safe.
144
+
145
+ ### Truncating long INFO logs: infoLogsCharLimit
146
+
147
+ `infoLogsCharLimit: 200` (or `VOID_LOG_INFO_LOGS_CHAR_LIMIT=200`) caps INFO log messages at 200 characters. When one is longer, three lines are logged:
148
+
149
+ ```
150
+ INFO │ xxxxxxxx... (259 chars)
151
+ WARN │ INFO log exceeded the 200 char threshold (259 chars). Refer to the debug logs to see the full text. To increase the limit, change infoLogsCharLimit in /path/to/logger.config.ts.
152
+ DEBUG │ <the full 259 characters, no limit>
153
+ ```
154
+
155
+ - The WARN also says where to raise the limit: the config file's full path when the value came from the file, the env var name when it came from the environment, or the `configure()` call when it was set in code.
156
+ - Leave it unset, `null` or `0` for no limit (the default). An env value of `0` turns off a limit set in the config file.
157
+ - A message of exactly the limit is not truncated. The count in `(N chars)` is the original length.
158
+ - Applies to INFO only, and not to `table()` output (use `tableCellLimit` for that). Action lines keep their label (`CLICK [>]`) in all three lines.
159
+ - Only applies when INFO is visible at the root `level`. When it is not, nothing is truncated or warned about, and the debug and full traces already hold the full text.
160
+ - The full text is in `debug-trace` and `full-trace` files (they capture every level), and on the console when `level` is `debug`. `partial-trace`, the console and the Playwright attachment get the truncated line plus the WARN.
161
+
162
+ ### Colors: ansi, fg, bg, callerColor
163
+
164
+ | Option | Env | Default | Controls |
165
+ |---|---|---|---|
166
+ | `ansi` | `VOID_LOG_ANSI` | auto-detected | Master switch. `false` means no escape codes at all, whatever the other flags say. |
167
+ | `fg` | `VOID_LOG_FG` | `true` | Foreground colors: the text color per intent, and the level color on plain `log` lines. Bold goes with it. |
168
+ | `bg` | `VOID_LOG_BG` | `true` | The theme background. |
169
+ | `callerColor` | none | `false` | Colors the caller suffix separately (console, debug level). |
170
+
171
+ With `ansi: true`:
172
+
173
+ | `fg` | `bg` | Console line |
174
+ |---|---|---|
175
+ | true | true | foreground + background (the 0.1.0 output) |
176
+ | true | false | foreground only |
177
+ | false | true | background only |
178
+ | false | false | no escape codes on the line body |
179
+
180
+ - The background is a single color for every level. There is no per-level background; the level only picks the foreground, and only on plain `log` lines.
181
+ - `callerColor` is its own opt-in and is **not** gated by `fg`/`bg`. With `fg: false, bg: false, callerColor: true` the body is bare and only the caller suffix is colored. `ansi: false` silences it too.
182
+ - Tables, trees, rows and every action follow the same flags, including the table title's bold. Plain-text file sinks (partial, debug and full traces, JSONL) never contain escape codes.
183
+ - Runtime switches: `enableFg()` / `disableFg()` / `isFgEnabled()` and the `Bg` equivalents.
184
+
185
+ ## More documentation
186
+
187
+ [ARCHITECTURE.md](ARCHITECTURE.md) describes the internals end to end: file layout, the dispatch pipeline, config layering, sinks, caller resolution and the Playwright fixture. It ships inside the npm package.
188
+
42
189
  ## Differences from the Java logger
43
190
 
44
191
  - Custom themes, `setTheme`, `tsWidth/levelWidth/actionWidth` and `traceArrow` are dropped (the width and arrow settings were never used by the renderer).
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
package/dist/actions.js CHANGED
@@ -226,16 +226,19 @@ class LogActions {
226
226
  }
227
227
  }
228
228
  const headers = [...widths.keys()];
229
- const ansi = (0, config_1.config)().ansi;
230
- const color = ansi ? (0, core_1.themed)(this.level, theme_1.LogIntent.DATA) : '';
231
- const rst = ansi ? ansi_1.RESET : '';
229
+ // themed() is '' when ansi is off or both fg and bg are off; the table's own bold/reset follow it.
230
+ const color = (0, core_1.themed)(this.level, theme_1.LogIntent.DATA);
231
+ const styled = color !== '';
232
+ const rst = styled ? ansi_1.RESET : '';
232
233
  const w = (h) => widths.get(h);
233
234
  const hBorder = '+' + headers.map((h) => '-'.repeat(w(h) + 2)).join('+') + '+';
234
235
  const headerRow = '|' + headers.map((h) => ' ' + (0, config_1.truncateCell)(h).padEnd(w(h)) + ' ').join('|') + '|';
235
236
  const out = [hBorder];
236
237
  if (title) {
237
- const bold = ansi ? ansi_1.BOLD : '';
238
- const resetBold = ansi ? ansi_1.RESET : '';
238
+ // Bold is part of the foreground style, so it follows fg (and the reset only exists to end the bold).
239
+ const titleStyled = styled && (0, config_1.config)().fg;
240
+ const bold = titleStyled ? ansi_1.BOLD : '';
241
+ const resetBold = titleStyled ? ansi_1.RESET : '';
239
242
  out.push('|' + bold + center(` ${title} `, headerRow.length - 2) + resetBold + '|');
240
243
  out.push(hBorder);
241
244
  }
@@ -1 +1 @@
1
- {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}