@void.01/advanced-logger 0.4.1 → 0.5.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.
package/CHANGELOG.md CHANGED
@@ -1,115 +1,133 @@
1
- # Changelog
2
-
3
- All notable changes to `@void.01/advanced-logger`. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/). While the version is below 1.0.0, a minor release may add options but keeps existing defaults and output unchanged unless noted.
4
-
5
- ## [0.4.1] - 2026-10-21
6
-
7
- First release under the new name, now with an MIT license.
8
-
9
- ### Changed
10
-
11
- - **The package is renamed to `@void.01/advanced-logger`.** Versions up to 0.4.0 were published as `@aryan-vashishth/advanced-logger`. To switch, uninstall the old package, install the new one, and change imports to `@void.01/advanced-logger` and `@void.01/advanced-logger/playwright`. The API and output are unchanged.
12
-
13
- ### Added
14
-
15
- - MIT license: a `LICENSE` file and `"license": "MIT"` in `package.json`.
16
-
17
- ## [0.4.0] - 2026-10-16
18
-
19
- Gives every action its own console color, writes every logged table to CSV and JSON files, and closes three redaction gaps. **Default console colors change**, **`table()` now requires a title in TypeScript**, secrets in message text are now masked by default, and each logged table now also creates two files. Trace files and JSONL have no colors, so only the masking affects them.
20
-
21
- ### Changed
22
-
23
- - **Every action has its own console color.** Before, all 11 interaction actions (`click`, `input`, `text`, ...) shared one color, the same bold white as a plain INFO line. Now each action has a distinct color within a hue family for its kind: interactions in blues, navigation in teals, observation in pinks, verification in gold, data in violets, success in greens, alerts in reds and oranges (`skip` is muted). Plain `log` lines keep their level's color. Every color has at least 4.5:1 contrast on a dark terminal and is clearly distinct from its neighbors; `palette.test.ts` enforces both.
24
- - The ERROR level red (and the `failed` action, which shares it) is brighter: (248,75,75) instead of (210,48,48), which was under 4.5:1 contrast on a dark terminal.
25
- - **Breaking for TypeScript: `table(rows, title)` requires a title**, which is shown above the table and names its files. `info.table(rows)` without one no longer compiles. At runtime it still works (plain JavaScript, older compiled code): the table renders without a title row, its files are named `untitled`, and a one-time warning asks for a title. `info.log(object)` keeps rendering without a title row and names its files `log`; a logged list's tables are `list-item-N`.
26
- - Table headers stand apart from the data: the title row is a dark violet (`TABLE_TITLE_FG`) and the column-name row a muted mid violet (`TABLE_COLUMNS_FG`), both exported, while borders and data rows keep the table color.
27
- - **Structured redaction works at any depth.** `fields('user', { password })` now prints `"password":"***"`; before, a nested object printed in clear. Arrays, Maps and `toJSON()` results are checked too, and the caller's object is never modified.
28
- - `configure((cfg) => ...)` callbacks are now checked like `configure({...})`. An unknown option or wrong-typed value set in the callback prints one warning and is undone. An array assigned to a Set-typed option (`suppressContains`, `suppressMethodPrefixes`, `includeOnlyPrefixes`) becomes a Set.
29
-
30
- ### Added
31
-
32
- - **Table attachments** (`files.tables`, default `true`, env `VOID_LOG_TABLES`): every logged table also gets a CSV and a JSON file, in one folder per parent log: `<logDir>/<date>/attachments/csv/<runId>-<worker>/<NNN>-<title>.csv` and the same under `attachments/json/`. The folder `<runId>-<worker>` matches the trace files (`<kind>-<runId>-<worker>.log`) the table appears in, `<NNN>` keeps log order, and a DEBUG `TABLE FILES` line after each table in debug-trace and full-trace names both files. Cells hold full values (no `tableCellLimit`) and are redacted like the console. CSV is UTF-8 with a BOM, CRLF line ends and RFC 4180 quoting, and text cells that a spreadsheet would run as a formula get a leading `'`. JSON holds the title, time, level, worker, run id, test, columns and rows. `maxRuns` deletes a run's attachment folders with its logs.
33
- - `LogEvent.table` (`TableData`): a rendered table's rows as data, for custom sinks. `tableFilePath()` is exported.
34
- - `redactText` option (default `true`, env `VOID_LOG_REDACT_TEXT`): masks secrets in free text, in `key=value`, `key: value`, `"key":"value"` and `'key': 'value'` forms where the key contains one of `redactKeys`, plus `Bearer` and `Basic` credentials. It runs once before every output, including the Playwright attachment. It is pattern-based, so it can miss a secret with no key next to it and can mask a harmless value whose key contains a sensitive word (`tokens=3`).
35
- - `recentRunMinutes` option (default `60`, env `VOID_LOG_RECENT_RUN_MINUTES`): how recently a run must have been written to for retention to keep it. Before, this was a fixed hour. `0` protects only the current run.
36
- - `ACTION_FG` (the per-action colors) and the `LogAction` type are exported.
37
- - `LogActions.msg()` takes an optional action name, which picks that action's color.
38
-
39
- ### Fixed
40
-
41
- - A blank entry in `redactKeys` (such as `''`) no longer masks every structured value. Blank entries are ignored, as free-text masking already did.
42
- - A table title longer than the table was cut off on the console. The table now widens to fit it.
43
- - A table title no longer ends with a full style reset, which dropped the background for the rest of that line.
44
-
45
- ## [0.3.0] - 2026-10-14
46
-
47
- Makes mixed logs from parallel runs separable, and stops a missing setup step from scattering or deleting logs. Console and file output are unchanged unless you turn on the new options.
48
-
49
- ### Added
50
-
51
- - `maxRuns` option (env `VOID_LOG_MAX_RUNS`): keeps the newest N runs per trace kind, current run included, and deletes older runs whole. A run's age is its newest file's modification time.
52
- - `consoleWorker` option (default `false`): prefixes console lines with the worker, `w<N> │ ` (or `main │ ` outside Playwright), the same prefix trace-file lines already have.
53
- - `consoleTest` option (default `false`): prefixes console lines with the running test's title, cut to 40 characters. Needs the Playwright fixture.
54
- - A one-time stderr warning in a Playwright worker that has no `VOID_RUN_ID`, meaning `initRun()` was never called in `globalSetup`.
55
- - `runIdMissing()` export, true in that situation.
56
- - `setTestContext(test, title?)` takes an optional short title for the console prefix. The Playwright fixture passes the test's own title.
57
- - `LogEvent.testTitle` for custom sinks.
58
- - README sections on redaction scope (only top-level structured keys are masked; free text and nested objects are not) and on `worker_threads` (not supported).
59
-
60
- ### Changed
61
-
62
- - `configure({...})` now checks its patch with the config file's validator. An unknown option or a wrongly typed value prints one stderr warning and is skipped; the rest of the patch still applies. It never throws. Before, any key and value were stored as given. The callback form, `configure((cfg) => ...)`, is not checked.
63
- - Retention (`maxLogFiles` and `maxRuns`) never deletes a run that has a file modified in the last hour, so another runner or CI shard writing to the same folder keeps its files. Neither limit is a hard cap.
64
- - GitHub annotation lines carry the `consoleWorker` / `consoleTest` prefix when those options are on.
65
-
66
- ### Fixed
67
-
68
- - Without `initRun()`, each Playwright worker used its own run id, so with `maxLogFiles` set it could delete a sibling worker's live log files as "older". Retention is now off in such a worker.
69
-
70
- ## [0.2.0] - 2026-10-13
71
-
72
- Adds a project config file, independent color toggles, INFO truncation and log retention. With no config file and no new options set, output is identical to 0.1.0.
73
-
74
- ### Added
75
-
76
- - Project config file: `logger.config.ts`, `.js`, `.cjs` or `.json` in the working directory, or the path in `VOID_LOG_CONFIG`. It is loaded once per process, so every Playwright worker reads it. It default-exports an object or a `(config) => patch` function. `defineConfig()` types it.
77
- - Config precedence, lowest to highest: built-in defaults, config file, environment variables, `configure()` calls.
78
- - Strict config file validation: a file that throws, has the wrong shape, has an unknown option or has a wrongly typed value fails with an error naming the file, on every use until fixed. An explicit `VOID_LOG_CONFIG` that does not exist is an error.
79
- - `fg` and `bg` options (env `VOID_LOG_FG`, `VOID_LOG_BG`) to turn the foreground colors and the theme background on and off independently. Bold, including table titles, follows `fg`.
80
- - `enableFg()`, `disableFg()`, `isFgEnabled()` and the `Bg` equivalents.
81
- - `infoLogsCharLimit` option (env `VOID_LOG_INFO_LOGS_CHAR_LIMIT`): INFO lines longer than the limit print truncated with the total char count, followed by a WARN saying where to raise the limit and a DEBUG line with the full text. Tables are excluded.
82
- - `maxLogFiles` option (env `VOID_LOG_MAX_FILES`): keeps the newest N files per trace kind across date folders. The current run's files are never deleted, and only files named like the logger's own output are touched.
83
- - `ARCHITECTURE.md`, shipped in the package, describing the internals end to end.
84
- - README installation, entry points, quick start and uninstall sections.
85
-
86
- ### Changed
87
-
88
- - Configuration is built lazily on first use, not at import, so an environment variable changed between import and the first log call is now honored.
89
- - With `fg` and `bg` both off, console lines carry no escape codes on the line body, not even a lone reset.
90
- - Environment variables apply only when set and valid. An invalid `VOID_LOG_LEVEL` is ignored instead of overriding a lower layer.
91
-
92
- ## [0.1.0] - 2026-10-05
93
-
94
- First release on npm. A self-contained TypeScript port of the VOID `core.logging` package for Playwright projects, with no runtime dependencies.
95
-
96
- ### Added
97
-
98
- - Level loggers `debug`, `info`, `warn` and `error`, each with intent-based actions such as `click`, `log`, `success`, `failed`, `password` (masked), `table`, `tree` and `row`, plus `fields()` for structured values.
99
- - Console sink with the HIGH_CONTRAST theme. ANSI is auto-detected and controlled by `VOID_LOG_ANSI`, `NO_COLOR` and `FORCE_COLOR`. A caller suffix is shown at `debug` level, optionally colored with `callerColor`.
100
- - Plain-text trace files under `logs/<date>/`: `partial-trace` (console-visible lines), `debug-trace` (every level, caller suffix) and `full-trace` (every level, `[CHAIN]` suffix). They are written synchronously, one file per Playwright worker, with every line prefixed `w<N> │ `.
101
- - Opt-in JSONL sink (`VOID_LOG_JSONL=1`) with one JSON record per call, including `worker` and `test`.
102
- - Secret redaction of structured values by key (`redactKeys`).
103
- - Custom sinks (`addSink`, `removeSink`) and in-memory capture (`captureLogs`).
104
- - Caller and in-project chain resolution, with filters (`suppressContains`, `suppressMethodPrefixes`, `includeOnlyPrefixes`, `projectRoots`).
105
- - Table cell truncation (`tableCellLimit`).
106
- - GitHub Actions `::error::` / `::warning::` annotations.
107
- - Playwright entry (`@aryan-vashishth/advanced-logger/playwright`): a drop-in `test` / `expect` whose auto fixture tags each test, logs `TEST START` / `TEST END` and attaches the test's log to the report (`attach`: `on-failure` by default).
108
- - `initRun()` to share one run id across Playwright workers via `VOID_RUN_ID` / `VOID_RUN_DATE`.
109
- - Environment variables `VOID_LOG_LEVEL`, `VOID_LOG_DIR`, `VOID_LOG_ANSI`, `VOID_LOG_JSONL` and `VOID_RUN_ID`, and `configure()` for code.
110
-
111
- [0.4.1]: https://www.npmjs.com/package/@void.01/advanced-logger/v/0.4.1
112
- [0.4.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.4.0
113
- [0.3.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.3.0
114
- [0.2.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.2.0
115
- [0.1.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.1.0
1
+ # Changelog
2
+
3
+ All notable changes to `@void.01/advanced-logger`. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses [Semantic Versioning](https://semver.org/). While the version is below 1.0.0, a minor release may add options but keeps existing defaults and output unchanged unless noted.
4
+
5
+ ## [0.5.0] - 2026-10-22
6
+
7
+ Quieter truncation warnings in the trace files, full text in `debug-trace`, a tree or table form for every action, and shorter log file names. **Trace file names change** (`FT-...` instead of `full-trace-...`) and **`debug-trace` no longer truncates INFO logs**.
8
+
9
+ ### Changed
10
+
11
+ - **`infoLogsCharLimit` warnings in `partial-trace` and `debug-trace`.** Instead of a WARN after every cut log, each file now gets one general WARN before its first cut line: "Some INFO logs exceed the N char limit. Any INFO log longer than N chars is truncated on the console and in partial-trace. Refer to debug-trace for the full text." It is repeated only if the limit changes.
12
+ - **`debug-trace` no longer truncates.** An over-limit INFO log is written once at full length with its own label, instead of the cut line followed by a DEBUG copy.
13
+ - The console, `full-trace`, JSONL and the Playwright attachment are unchanged: cut line, per-log WARN and DEBUG copy for every over-limit log.
14
+ - **Shorter log file names.** The folder already names the kind, so files are now `PT-<runId>-<worker>.log` (partial-trace), `DT-...` (debug-trace), `FT-...` (full-trace) and `JL-....jsonl` (jsonl), instead of repeating the kind (`full-trace-<runId>-<worker>.log`). Folders and the `<runId>-<worker>` part are unchanged. `maxRuns` / `maxLogFiles` cleanup also matches the old names, so files written before this version still age out. Scripts that look for files by the old names need updating.
15
+ - `resolved(heading, fields)` labels every tree line `RESOLVED [ok]`, as the one-line form does. Before, tree lines said `RESOLVED`.
16
+
17
+ ### Added
18
+
19
+ - **Every action accepts a heading plus fields or rows**, not just a message. `info.success('Order placed', { id: 42 })` or `error.failed('Save', 'status', 500)` logs the heading and a key/value tree under it. `info.result('Search hits', rows)` logs the heading and a table of the rows, with CSV/JSON files named after the heading. The heading and tree lines carry the action's label and color, and values are redacted as in other trees and tables. A single message works as before. `password()` is unchanged.
20
+ - `LogEvent.truncation` (type `Truncation`, exported) tells custom sinks which part of an `infoLogsCharLimit` cut an event is: `cut`, `warn` or `copy`.
21
+
22
+ ## [0.4.1] - 2026-10-21
23
+
24
+ First release under the new name, now with an MIT license.
25
+
26
+ ### Changed
27
+
28
+ - **The package is renamed to `@void.01/advanced-logger`.** Versions up to 0.4.0 were published as `@aryan-vashishth/advanced-logger`. To switch, uninstall the old package, install the new one, and change imports to `@void.01/advanced-logger` and `@void.01/advanced-logger/playwright`. The API and output are unchanged.
29
+
30
+ ### Added
31
+
32
+ - MIT license: a `LICENSE` file and `"license": "MIT"` in `package.json`.
33
+
34
+ ## [0.4.0] - 2026-10-16
35
+
36
+ Gives every action its own console color, writes every logged table to CSV and JSON files, and closes three redaction gaps. **Default console colors change**, **`table()` now requires a title in TypeScript**, secrets in message text are now masked by default, and each logged table now also creates two files. Trace files and JSONL have no colors, so only the masking affects them.
37
+
38
+ ### Changed
39
+
40
+ - **Every action has its own console color.** Before, all 11 interaction actions (`click`, `input`, `text`, ...) shared one color, the same bold white as a plain INFO line. Now each action has a distinct color within a hue family for its kind: interactions in blues, navigation in teals, observation in pinks, verification in gold, data in violets, success in greens, alerts in reds and oranges (`skip` is muted). Plain `log` lines keep their level's color. Every color has at least 4.5:1 contrast on a dark terminal and is clearly distinct from its neighbors; `palette.test.ts` enforces both.
41
+ - The ERROR level red (and the `failed` action, which shares it) is brighter: (248,75,75) instead of (210,48,48), which was under 4.5:1 contrast on a dark terminal.
42
+ - **Breaking for TypeScript: `table(rows, title)` requires a title**, which is shown above the table and names its files. `info.table(rows)` without one no longer compiles. At runtime it still works (plain JavaScript, older compiled code): the table renders without a title row, its files are named `untitled`, and a one-time warning asks for a title. `info.log(object)` keeps rendering without a title row and names its files `log`; a logged list's tables are `list-item-N`.
43
+ - Table headers stand apart from the data: the title row is a dark violet (`TABLE_TITLE_FG`) and the column-name row a muted mid violet (`TABLE_COLUMNS_FG`), both exported, while borders and data rows keep the table color.
44
+ - **Structured redaction works at any depth.** `fields('user', { password })` now prints `"password":"***"`; before, a nested object printed in clear. Arrays, Maps and `toJSON()` results are checked too, and the caller's object is never modified.
45
+ - `configure((cfg) => ...)` callbacks are now checked like `configure({...})`. An unknown option or wrong-typed value set in the callback prints one warning and is undone. An array assigned to a Set-typed option (`suppressContains`, `suppressMethodPrefixes`, `includeOnlyPrefixes`) becomes a Set.
46
+
47
+ ### Added
48
+
49
+ - **Table attachments** (`files.tables`, default `true`, env `VOID_LOG_TABLES`): every logged table also gets a CSV and a JSON file, in one folder per parent log: `<logDir>/<date>/attachments/csv/<runId>-<worker>/<NNN>-<title>.csv` and the same under `attachments/json/`. The folder `<runId>-<worker>` matches the trace files (`<kind>-<runId>-<worker>.log`) the table appears in, `<NNN>` keeps log order, and a DEBUG `TABLE FILES` line after each table in debug-trace and full-trace names both files. Cells hold full values (no `tableCellLimit`) and are redacted like the console. CSV is UTF-8 with a BOM, CRLF line ends and RFC 4180 quoting, and text cells that a spreadsheet would run as a formula get a leading `'`. JSON holds the title, time, level, worker, run id, test, columns and rows. `maxRuns` deletes a run's attachment folders with its logs.
50
+ - `LogEvent.table` (`TableData`): a rendered table's rows as data, for custom sinks. `tableFilePath()` is exported.
51
+ - `redactText` option (default `true`, env `VOID_LOG_REDACT_TEXT`): masks secrets in free text, in `key=value`, `key: value`, `"key":"value"` and `'key': 'value'` forms where the key contains one of `redactKeys`, plus `Bearer` and `Basic` credentials. It runs once before every output, including the Playwright attachment. It is pattern-based, so it can miss a secret with no key next to it and can mask a harmless value whose key contains a sensitive word (`tokens=3`).
52
+ - `recentRunMinutes` option (default `60`, env `VOID_LOG_RECENT_RUN_MINUTES`): how recently a run must have been written to for retention to keep it. Before, this was a fixed hour. `0` protects only the current run.
53
+ - `ACTION_FG` (the per-action colors) and the `LogAction` type are exported.
54
+ - `LogActions.msg()` takes an optional action name, which picks that action's color.
55
+
56
+ ### Fixed
57
+
58
+ - A blank entry in `redactKeys` (such as `''`) no longer masks every structured value. Blank entries are ignored, as free-text masking already did.
59
+ - A table title longer than the table was cut off on the console. The table now widens to fit it.
60
+ - A table title no longer ends with a full style reset, which dropped the background for the rest of that line.
61
+
62
+ ## [0.3.0] - 2026-10-14
63
+
64
+ Makes mixed logs from parallel runs separable, and stops a missing setup step from scattering or deleting logs. Console and file output are unchanged unless you turn on the new options.
65
+
66
+ ### Added
67
+
68
+ - `maxRuns` option (env `VOID_LOG_MAX_RUNS`): keeps the newest N runs per trace kind, current run included, and deletes older runs whole. A run's age is its newest file's modification time.
69
+ - `consoleWorker` option (default `false`): prefixes console lines with the worker, `w<N> │ ` (or `main │ ` outside Playwright), the same prefix trace-file lines already have.
70
+ - `consoleTest` option (default `false`): prefixes console lines with the running test's title, cut to 40 characters. Needs the Playwright fixture.
71
+ - A one-time stderr warning in a Playwright worker that has no `VOID_RUN_ID`, meaning `initRun()` was never called in `globalSetup`.
72
+ - `runIdMissing()` export, true in that situation.
73
+ - `setTestContext(test, title?)` takes an optional short title for the console prefix. The Playwright fixture passes the test's own title.
74
+ - `LogEvent.testTitle` for custom sinks.
75
+ - README sections on redaction scope (only top-level structured keys are masked; free text and nested objects are not) and on `worker_threads` (not supported).
76
+
77
+ ### Changed
78
+
79
+ - `configure({...})` now checks its patch with the config file's validator. An unknown option or a wrongly typed value prints one stderr warning and is skipped; the rest of the patch still applies. It never throws. Before, any key and value were stored as given. The callback form, `configure((cfg) => ...)`, is not checked.
80
+ - Retention (`maxLogFiles` and `maxRuns`) never deletes a run that has a file modified in the last hour, so another runner or CI shard writing to the same folder keeps its files. Neither limit is a hard cap.
81
+ - GitHub annotation lines carry the `consoleWorker` / `consoleTest` prefix when those options are on.
82
+
83
+ ### Fixed
84
+
85
+ - Without `initRun()`, each Playwright worker used its own run id, so with `maxLogFiles` set it could delete a sibling worker's live log files as "older". Retention is now off in such a worker.
86
+
87
+ ## [0.2.0] - 2026-10-13
88
+
89
+ Adds a project config file, independent color toggles, INFO truncation and log retention. With no config file and no new options set, output is identical to 0.1.0.
90
+
91
+ ### Added
92
+
93
+ - Project config file: `logger.config.ts`, `.js`, `.cjs` or `.json` in the working directory, or the path in `VOID_LOG_CONFIG`. It is loaded once per process, so every Playwright worker reads it. It default-exports an object or a `(config) => patch` function. `defineConfig()` types it.
94
+ - Config precedence, lowest to highest: built-in defaults, config file, environment variables, `configure()` calls.
95
+ - Strict config file validation: a file that throws, has the wrong shape, has an unknown option or has a wrongly typed value fails with an error naming the file, on every use until fixed. An explicit `VOID_LOG_CONFIG` that does not exist is an error.
96
+ - `fg` and `bg` options (env `VOID_LOG_FG`, `VOID_LOG_BG`) to turn the foreground colors and the theme background on and off independently. Bold, including table titles, follows `fg`.
97
+ - `enableFg()`, `disableFg()`, `isFgEnabled()` and the `Bg` equivalents.
98
+ - `infoLogsCharLimit` option (env `VOID_LOG_INFO_LOGS_CHAR_LIMIT`): INFO lines longer than the limit print truncated with the total char count, followed by a WARN saying where to raise the limit and a DEBUG line with the full text. Tables are excluded.
99
+ - `maxLogFiles` option (env `VOID_LOG_MAX_FILES`): keeps the newest N files per trace kind across date folders. The current run's files are never deleted, and only files named like the logger's own output are touched.
100
+ - `ARCHITECTURE.md`, shipped in the package, describing the internals end to end.
101
+ - README installation, entry points, quick start and uninstall sections.
102
+
103
+ ### Changed
104
+
105
+ - Configuration is built lazily on first use, not at import, so an environment variable changed between import and the first log call is now honored.
106
+ - With `fg` and `bg` both off, console lines carry no escape codes on the line body, not even a lone reset.
107
+ - Environment variables apply only when set and valid. An invalid `VOID_LOG_LEVEL` is ignored instead of overriding a lower layer.
108
+
109
+ ## [0.1.0] - 2026-10-05
110
+
111
+ First release on npm. A self-contained TypeScript port of the VOID `core.logging` package for Playwright projects, with no runtime dependencies.
112
+
113
+ ### Added
114
+
115
+ - Level loggers `debug`, `info`, `warn` and `error`, each with intent-based actions such as `click`, `log`, `success`, `failed`, `password` (masked), `table`, `tree` and `row`, plus `fields()` for structured values.
116
+ - Console sink with the HIGH_CONTRAST theme. ANSI is auto-detected and controlled by `VOID_LOG_ANSI`, `NO_COLOR` and `FORCE_COLOR`. A caller suffix is shown at `debug` level, optionally colored with `callerColor`.
117
+ - Plain-text trace files under `logs/<date>/`: `partial-trace` (console-visible lines), `debug-trace` (every level, caller suffix) and `full-trace` (every level, `[CHAIN]` suffix). They are written synchronously, one file per Playwright worker, with every line prefixed `w<N> │ `.
118
+ - Opt-in JSONL sink (`VOID_LOG_JSONL=1`) with one JSON record per call, including `worker` and `test`.
119
+ - Secret redaction of structured values by key (`redactKeys`).
120
+ - Custom sinks (`addSink`, `removeSink`) and in-memory capture (`captureLogs`).
121
+ - Caller and in-project chain resolution, with filters (`suppressContains`, `suppressMethodPrefixes`, `includeOnlyPrefixes`, `projectRoots`).
122
+ - Table cell truncation (`tableCellLimit`).
123
+ - GitHub Actions `::error::` / `::warning::` annotations.
124
+ - Playwright entry (`@aryan-vashishth/advanced-logger/playwright`): a drop-in `test` / `expect` whose auto fixture tags each test, logs `TEST START` / `TEST END` and attaches the test's log to the report (`attach`: `on-failure` by default).
125
+ - `initRun()` to share one run id across Playwright workers via `VOID_RUN_ID` / `VOID_RUN_DATE`.
126
+ - Environment variables `VOID_LOG_LEVEL`, `VOID_LOG_DIR`, `VOID_LOG_ANSI`, `VOID_LOG_JSONL` and `VOID_RUN_ID`, and `configure()` for code.
127
+
128
+ [0.5.0]: https://www.npmjs.com/package/@void.01/advanced-logger/v/0.5.0
129
+ [0.4.1]: https://www.npmjs.com/package/@void.01/advanced-logger/v/0.4.1
130
+ [0.4.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.4.0
131
+ [0.3.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.3.0
132
+ [0.2.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.2.0
133
+ [0.1.0]: https://www.npmjs.com/package/@aryan-vashishth/advanced-logger/v/0.1.0