From 1041e425ec1f60922c6cf12f0bceca048e2c1405 Mon Sep 17 00:00:00 2001 From: jschick04 Date: Wed, 13 May 2026 21:25:41 -0500 Subject: [PATCH 1/3] Restructure docs into feature-area pages and refresh for current product surface --- docs/Filtering.md | 117 ++++++++++++++++++++++-------- docs/FirstTimeSetup.md | 23 ------ docs/Home.md | 16 +++-- docs/Keyboard-And-Copy.md | 46 ++++++++++++ docs/Opening-Logs.md | 56 +++++++++++++++ docs/Provider-Databases.md | 122 ++++++++++++++++++++++++++++++++ docs/ProviderDatabases.md | 25 ------- docs/Saved-Filters.md | 59 +++++++++++++++ docs/Settings.md | 63 +++++++++++++++++ docs/Updates-And-Diagnostics.md | 51 +++++++++++++ docs/Viewing-Events.md | 52 ++++++++++++++ docs/Viewing.md | 28 -------- 12 files changed, 550 insertions(+), 108 deletions(-) delete mode 100644 docs/FirstTimeSetup.md create mode 100644 docs/Keyboard-And-Copy.md create mode 100644 docs/Opening-Logs.md create mode 100644 docs/Provider-Databases.md delete mode 100644 docs/ProviderDatabases.md create mode 100644 docs/Saved-Filters.md create mode 100644 docs/Settings.md create mode 100644 docs/Updates-And-Diagnostics.md create mode 100644 docs/Viewing-Events.md delete mode 100644 docs/Viewing.md diff --git a/docs/Filtering.md b/docs/Filtering.md index 636241a0..240a410a 100644 --- a/docs/Filtering.md +++ b/docs/Filtering.md @@ -2,38 +2,99 @@ ## Filtering -There are three ways to filter. All filters apply to all logs open in that window. +The Filter pane sits above the event table. Every event in the active log set is evaluated against the applied filters; non-matches are hidden. The pane has five `Add` buttons across the top: -### Add filter +| Button | Adds | +| --- | --- | +| `Add Basic Filter` | A category × evaluator × value comparison against a single resolved-event field. | +| `Add Date Filter` | A `Before` / `After` time-window filter. Only one date filter exists at a time; the button is hidden once one is added. | +| `Add Advanced Filter` | A free-form Dynamic LINQ expression evaluated against `ResolvedEvent`. | +| `Add Cached Filter` | Picks a string from the Filter Cache (Favorites + Recent) and adds it as a Cached filter row. See [Saved Filters](Saved-Filters.md). | +| `Add Exclusion` | A Basic filter row in the excluded state — same category × evaluator × value shape as `Add Basic Filter`, but matching events are hidden instead of shown. Any saved row can be flipped between included and excluded later via the chrome `Exclude` / `Include` button. | -This button provides drop-down menus for easy filtering. +Each saved row carries a chrome strip with `Edit`, `Exclude` (or `Include` when the row is already an exclusion), `Remove`, and a `Disable` / `Enable` toggle. While editing, the chrome shows `Save` and `Cancel`. Non-exclusion rows also show a highlight-color picker (`Highlight Color`) before the comparison content. When any filter is being applied, the pane shows `[Applying Filters]` with a spinner; otherwise it shows `[Active Filters: N]`. The pane can be collapsed via the caret in the top-right corner. + +`Edit` → `Save All Filters` and `Edit` → `Clear All Filters` operate on the entire pane — see [Keyboard and Copy](Keyboard-And-Copy.md). `View` → `Show All Events` (`Ctrl+H`) suspends evaluation without removing any filters. + +### Basic filters + +Pick a category, pick an evaluator, then enter or pick a comparison value. Optionally add one or more sub-filters joined to the parent with `AND` or `OR`. + +**Categories** (`FilterCategory`): + +| Label | Source field | +| --- | --- | +| `Event ID` | event id (int) | +| `Activity ID` | activity id GUID (string-equal) | +| `Level` | resolved level string (`Information`, `Warning`, `Error`, `Critical`, `Verbose`) | +| `Keywords` | display keywords | +| `Source` | provider name | +| `Task Category` | resolved task name | +| `Process ID` | process id | +| `Thread ID` | thread id | +| `User ID` | SID string | +| `Description` | resolved description text | +| `Xml` | raw XML (forces eager XML resolution; see caveat) | + +**Evaluators** (`FilterEvaluator`): + +| Label | Behavior | +| --- | --- | +| `Equals` | Exact match. Numeric for ID-typed fields; case-sensitive string compare for everything except `Keywords`, which is case-insensitive. | +| `Contains` | Case-insensitive substring match. | +| `Not Equal` | Negated `Equals` (same case-sensitivity rules). | +| `Not Contains` | Negated `Contains` (case-insensitive). | +| `Multi Select` | Matches any value in the supplied set. The category determines which set is offered (e.g., `Level` → checkboxes for the five level values; `Source` → the providers seen in the active logs). | + +Sub-filters live underneath the parent and can be combined freely. `AND` requires the sub-filter to also match; `OR` matches if either the parent or the sub-filter matches. ### Date filter -Any events falling outside of the starting and ending time specified here are hidden. - -### Advanced filter - -This button displays a textbox allowing a LINQ expression for filtering. Filterable properties are: - -Property Name|Type --|- -ComputerName|string -Description|string -Id|int -KeywordDisplayNames|IEnumerable -Keywords|long? -LogName|string -OwningLog|string -Qualifiers|int? -RecordId|long? -SeverityLevel|Enum? (Error == 2, Warning == 3, Information == 4) -Source|string -TaskCategory|string -Template|string? -TimeCreated|DateTime -Xml|string - -Note that Xml is generated when requested, so filters against Xml may be slower than filters against other properties. +`After` / `Before` timestamps in the configured time zone (see [Settings](Settings.md) → `Time Zone`). Only one date filter is allowed; removing it lets `Add Date Filter` reappear. Right-clicking an event in the table and choosing `Exclude Events Before` / `Exclude Events After` is a shortcut that sets a date filter using the right-clicked event's timestamp as the boundary. + +### Advanced filters (Dynamic LINQ) + +Free-form expression evaluated against the `ResolvedEvent` record using [Dynamic LINQ](https://dynamic-linq.net/). The placeholder shown in the input is: + +``` +(Id == 1000 || Id == 1001) && Description.Contains('Fault') +``` + +Available properties: + +| Property | Type | Notes | +| --- | --- | --- | +| `Id` | `int` | Event id. | +| `ActivityId` | `Guid?` | Nullable. | +| `Level` | `string` | `Information`, `Warning`, `Error`, `Critical`, `Verbose`. | +| `Keywords` | `IReadOnlyList` | Use `.Contains("...")`. | +| `KeywordsDisplayName` | `string` | Comma-separated keywords. | +| `Source` | `string` | Provider name. | +| `TaskCategory` | `string` | | +| `ProcessId` | `int?` | | +| `ThreadId` | `int?` | | +| `UserId` | `SecurityIdentifier?` | Use `.ToString()` to compare. | +| `TimeCreated` | `DateTime` | The raw `ResolvedEvent` value — the table and Details pane render it in the configured time zone, but expressions see the underlying value. | +| `LogName` | `string` | Source log channel as reported by the event reader. | +| `OwningLog` | `string` | The file path or live-channel name as displayed in the tab strip. | +| `LogPathType` | `LogPathType` | `File` or `Channel`. | +| `ComputerName` | `string` | | +| `RecordId` | `long?` | | +| `Description` | `string` | Resolved description text. | +| `Xml` | `string` | Raw event XML. **See XML caveat.** | + +**XML caveat.** When a filter expression references `Xml`, the underlying `EventLogReader` is opened with XML rendering enabled, which is meaningfully slower than the default. Adding an XML-referencing filter against logs already loaded without XML triggers a one-time re-read of those logs (only the logs that lack XML — logs already loaded with XML are untouched). Removing or disabling an XML filter does not trigger another reload because the in-memory XML is harmless to keep. Filters that don't reference `Xml` operate on already-resolved fields and stay fast. + +### Excluded filters + +Either an `Add Exclusion` row from the start, or any Basic / Advanced row toggled with the `Exclude` chrome button. Matching events are hidden. Excluded filters are evaluated independently of `View` → `Show All Events`: the show-all toggle disables only the inclusion side, so exclusions and the date filter remain in effect when it's on. To suspend everything at once, use `Edit` → `Clear All Filters`. + +### Cached filters + +Quick-access strings for repeat use. See [Saved Filters](Saved-Filters.md) for how the cache is populated and managed. + +### Highlighting + +Each non-excluded filter row exposes a `Highlight Color` picker in its chrome. When set, every event matching that filter is rendered with that background color in the event table. When multiple filters with different colors match the same event, the first matching enabled, non-excluded filter in pane order wins (a filter with `Highlight Color` set to `None` still counts as a match and suppresses any later highlight). Selection styling beats highlight while a row is selected. Highlight colors persist with the filter — saving a group preserves its colors. [Docs home](Home.md) diff --git a/docs/FirstTimeSetup.md b/docs/FirstTimeSetup.md deleted file mode 100644 index 81329be2..00000000 --- a/docs/FirstTimeSetup.md +++ /dev/null @@ -1,23 +0,0 @@ -# [EventLogExpert](Home.md) - -## First time setup - -After installing EventLogExpert, there are a few settings you may want to change. - -### Set the time zone - -From Tools -> Options, the time zone can be changed at any time. Any .evtx files that are opened will be adjusted to show in the selected time zone. This allows the Combined view to line up events from machines in different time zones. It can also be helpful to set this to the time of a particular server, or to the time zone of a customer you are working with, so you can view the event logs as if you were in their time zone. - -### Opt in to prerelease builds - -As of this writing, the tool is under active development. In Tools -> Options, you can opt in to prereleases to test the latest features. - -### Choose the Description pane behavior - -By default, the Description pane at the bottom will pop open the first time an event is selected. If the user collapses it, it will then stay closed until it is manually expanded again. Tools -> Options has a setting that makes this pane always pop open when the selection is changed. - -### Import provider databases - -If you have created event databases, they can be imported in Tools -> Options. See [Provider Databases](ProviderDatabases.md). - -[Docs home](Home.md) diff --git a/docs/Home.md b/docs/Home.md index 3fa68046..7bdcef68 100644 --- a/docs/Home.md +++ b/docs/Home.md @@ -1,8 +1,16 @@ # EventLogExpert +A Windows Event Log viewer for tech support and IT professionals. Reads `.evtx` files and live event channels, with provider-database support so events captured on one machine resolve correctly on another. + +Runs on supported versions of Windows: Windows 11, Windows Server 2022, Windows Server 2025. + ## Topics -* [First time setup](FirstTimeSetup.md) - Customizing your experience. -* [Filtering](Filtering.md) - How to use the various filter options. -* [Viewing events](Viewing.md) - Things to know about viewing, selecting, scrolling, and reading events. -* [Provider databases](ProviderDatabases.md) - Viewing event descriptions on machines that don't have the requisite software installed. +- [Opening Logs](Opening-Logs.md) — Opening files, folders, and live channels. +- [Viewing Events](Viewing-Events.md) — Tab strip, configurable table columns, details pane. +- [Filtering](Filtering.md) — Basic, Date, Advanced (Dynamic LINQ), Cached, Exclusion filters and highlighting. +- [Saved Filters](Saved-Filters.md) — Filter cache (Favorites + Recent) and Filter groups. +- [Provider Databases](Provider-Databases.md) — Why event databases exist and the `eventdbtool` CLI. +- [Settings](Settings.md) — Time zone, databases, theme, copy mode, log level, pre-release builds. +- [Keyboard and Copy](Keyboard-And-Copy.md) — Ctrl+C copy formats and other keyboard bindings. +- [Updates and Diagnostics](Updates-And-Diagnostics.md) — Docs, Submit an Issue, Check for Updates, Release Notes and View Debug Logs. diff --git a/docs/Keyboard-And-Copy.md b/docs/Keyboard-And-Copy.md new file mode 100644 index 00000000..3579aece --- /dev/null +++ b/docs/Keyboard-And-Copy.md @@ -0,0 +1,46 @@ +# [EventLogExpert](Home.md) + +## Keyboard and Copy + +### Copy formats + +The `Edit` menu always lists all four copy formats: + +| Edit menu item | Format | Output | +| --- | --- | --- | +| `Copy Selected` | `Default` | One quoted, space-separated field per visible event-table column, plus the description. | +| `Copy Selected (Simple)` | `Simple` | Five quoted, space-separated fields: level, timestamp, source, event id, description. | +| `Copy Selected (XML)` | `Xml` | The event's XML, pretty-printed when parseable. | +| `Copy Selected (Full)` | `Full` | A multi-line block with labeled fields (`Log Name`, `Source`, `Date`, `Event ID`, `Task Category`, `Level`, `Keywords`, `User`, `Computer`, `Description`, `Event Xml`). | + +`Ctrl+C` invokes whichever format `Tools` → `Settings` → `Keyboard Copy Behavior` is set to. The `Ctrl+C` shortcut hint in the `Edit` menu moves to that entry so the keyboard binding is always visible. `Default` is the initial setting. + +Multi-selection is honored — every selected row is included in the copied payload in the order they appear. + +`Save All Filters` and `Clear All Filters` also live on the `Edit` menu. `Save All Filters` prompts for a `Group Name` (default `New Filter Section\New Filter Group`) and saves the current filter pane as a named filter group — see [Saved Filters](Saved-Filters.md). `Clear All Filters` removes every filter from the pane in one step, including the date filter. + +### Menu navigation + +The menu bar follows WAI-ARIA menubar conventions: + +| Key | Action | +| --- | --- | +| `Alt` (or `F10`) | Move focus to the menu bar. | +| `ArrowLeft` / `ArrowRight` | Move between top-level menus. Wraps. If a menu is open, switches to the new menu. | +| `Home` / `End` | Jump to the first or last top-level menu. | +| `ArrowDown` | Open the focused menu, with focus on the first item. | +| `ArrowUp` | Open the focused menu, with focus on the last item. | +| `Enter` / `Space` | Open the focused menu (alternative to `ArrowDown`). | +| `Escape` | Close the open menu. | + +Hovering a different top-level menu while a menu is open switches to that menu — same as Win32 menubars. + +### Other shortcuts + +| Shortcut | Action | +| --- | --- | +| `Ctrl+O` | `File` → `Open` → `File`. Standalone open; not the `Combine` variant. | +| `Ctrl+H` | Toggle `View` → `Show All Events`. Suspends inclusion-filter evaluation so any event not blocked by an exclusion or by the date filter becomes visible. Toggling again resumes filtering against the same set. | +| `Ctrl+C` | Copy selected events using the `Keyboard Copy Behavior` format. | + +[Docs home](Home.md) diff --git a/docs/Opening-Logs.md b/docs/Opening-Logs.md new file mode 100644 index 00000000..d361473c --- /dev/null +++ b/docs/Opening-Logs.md @@ -0,0 +1,56 @@ +# [EventLogExpert](Home.md) + +## Opening Logs + +The `File` menu is the primary entry point for opening logs. There are three sources, all available under both `File` → `Open` (replace the active log set) and `File` → `Combine` (overlay on top of what's already open). The `Combine` submenu is greyed out until at least one log is open. + +`.evtx` files can also be opened by drag-and-drop onto the window or by passing them as command-line arguments at launch. Both routes always combine — they add to the current log set rather than replacing it. + +### File + +`File` → `Open` → `File` (`Ctrl+O`) opens the system file picker filtered to `.evtx`. Pick one file or many — every selected `.evtx` is loaded concurrently as a separate log. The same applies for `File` → `Combine` → `File`, which adds the picked files to the existing log set. + +### Folder + +`File` → `Open` → `Folder` opens a folder picker. Every `.evtx` in the picked folder (top-level only, no recursion) is loaded as a separate log. + +Use this when you've been handed a folder of `.evtx` exports from one or more machines and want to load the lot in one step. + +### Live + +`File` → `Open` → `Live` opens a Windows event channel as a live log — the channel is read in real time as opposed to a static snapshot. + +The submenu always lists `Application`, `System`, and `Security`. Below them, an `Other Logs` submenu is built from the channels actually registered on the local machine, presented as a hierarchical tree (`Microsoft` → `Windows` → `` → ``, etc.). The list is discovered once per app session and cached after the first menu open or background prewarm; channels added or removed during the session aren't reflected until the app restarts. + +**Admin-only channels.** Some channels can't be read without elevation. When the app isn't running as Administrator, `Security` (and other elevation-gated channels surfaced under `Other Logs`) appear in the menu but are disabled. Re-launching the app as Administrator enables them. The disabled state is the only signal — there's no popup. Anything that opens fine without elevation stays enabled. + +### Combining logs + +`File` → `Combine` is the same submenu as `Open`, but adds the picked source(s) to the currently-open log set instead of replacing it. With two or more logs open, an extra `Combined` tab appears in the tab strip showing all events from all open logs interleaved by time — see [Viewing Events](Viewing-Events.md). + +`Combine` works for any mix of file logs and live channels. Combining `.evtx` exports from machines in different time zones produces a coherent timeline because the event table renders timestamps in the time zone configured under [Settings](Settings.md). A live channel combined with a file log behaves the same — the live side simply keeps appending events as they arrive (when continuously updating) or filling the buffer (when not). + +### Live log behavior + +Two `View` menu items only matter while a live log is open: + +- **`Continuously Update`** is a toggle. When `on`, new events stream into the table as they arrive. When `off`, new events accumulate in a buffer and the table view stays put. +- **`Load New Events`** drains the buffer into the table once. Useful when `Continuously Update` is off but you want to catch up to "now" before going back to a static view. + +The status bar surfaces both: + +| Status bar token | Condition | +| --- | --- | +| `Continuously Updating` | At least one live log is open and `Continuously Update` is on. | +| `New Events: ` | At least one live log is open and `Continuously Update` is off; `` is the buffer size. | +| `Buffer Full` | The new-event buffer reached its cap. Live watchers are stopped while this is set, so no further events arrive until either `Load New Events` drains the buffer or `Continuously Update` is turned on (both clear the buffer and restart the watchers). | + +### Close All + +`File` → `Close All` removes every open log (file or live) and clears the tab strip. There's no per-tab close from the `File` menu — the per-tab `×` button on each tab in the tab strip closes a single log. Combined tabs can't be closed individually; they disappear automatically when the tab strip drops below two source logs. + +### Exit + +`File` → `Exit` closes the application. + +[Docs home](Home.md) diff --git a/docs/Provider-Databases.md b/docs/Provider-Databases.md new file mode 100644 index 00000000..64e08e3e --- /dev/null +++ b/docs/Provider-Databases.md @@ -0,0 +1,122 @@ +# [EventLogExpert](Home.md) + +## Provider Databases + +Windows event descriptions and task categories aren't stored inside an `.evtx` file. They live in resource DLLs registered against the provider name on whichever machine produced the events. Open an `.evtx` from another machine on yours, and Windows can usually only render a placeholder like `The description for Event ID … cannot be found`. + +Provider databases solve that. A `.db` file contains the resolved provider metadata (descriptions, task categories, level / keyword names, parameter strings) for a set of providers, snapshotted from a machine that does have the providers installed. Load that database into EventLogExpert and `.evtx` files captured on the source machine resolve as if you were running on the source machine. + +When at least one database is enabled in `Tools` → `Settings`, providers are resolved in this order: + +1. For an `.evtx` opened from a folder that also contains its sibling `LocaleMetaData/*.MTA` files, those files are consulted first (this is the primary path for self-contained exports). +2. Then the enabled databases, in load order — the first database that knows the provider wins. +3. Then the local machine's installed providers as a fallback. + +Disable all databases (or remove them) to fall back entirely to local providers. + +### Lifecycle (Settings → Databases) + +`Tools` → `Settings` → `Databases` lists every database the app knows about. The full lifecycle is covered in [Settings](Settings.md). The states a row can be in: + +| Status | Behavior | +| --- | --- | +| `Ready` | Loaded and used to resolve events. | +| `Upgrade required` | Schema is older than the running build but in-place upgrade is supported. The row's `Upgrade` button performs the migration in place; a backup of the original is kept on disk. | +| `Upgrade failed` | Most recent upgrade attempt failed. Use `Retry Upgrade`, re-import, or remove. | +| `Recovery required` | A previous upgrade left a backup; the original is still safe but the row needs reconciliation before going back to `Ready`. | +| `Unrecognized` | Not a database produced by this tool. | +| `Obsolete` | A v1 / v2 schema database from a long-superseded build. Not upgradable in place; recreate with `eventdbtool create`. | +| `Classification failed` | Initial classification threw. Details in `View Logs` (see [Updates and Diagnostics](Updates-And-Diagnostics.md)). | + +A `Classifying databases…` banner appears during the initial pass on app startup. + +## eventdbtool + +Provider databases are produced and maintained by `eventdbtool`, a CLI shipped alongside EventLogExpert in the same release as `eventdbtool.zip`. The tool runs on a Windows machine that has the providers you want captured (an Exchange Server, a SQL Server, a fresh OS install — whatever produces the events you need to read elsewhere). + +Root description (verbatim from `--help`): + +> Tool used to create and modify databases for use with EventLogExpert + +Five subcommands. + +### `eventdbtool show` + +``` +eventdbtool show [] [--filter ] [--verbose] +``` + +> List event providers. When no source is supplied, lists providers on the local machine. When a source is supplied, it may be a .db file created with this tool, an exported .evtx file (resolved via its sibling LocaleMetaData/*.MTA files), or a folder containing either. + +| Argument / option | Description | +| --- | --- | +| `source` (optional) | A `.db` file, an exported `.evtx` file, or a folder containing `.db` and/or `.evtx` files (top-level only). | +| `--filter` | `Filter for provider names matching the specified regex string.` | +| `--verbose` | `Verbose logging. May be useful for troubleshooting.` | + +### `eventdbtool create` + +``` +eventdbtool create [] [--filter ] [--skip-providers-in-file ] [--verbose] +``` + +> Creates a new event database. + +The `` argument must end in `.db` and must not already exist. + +| Argument / option | Description | +| --- | --- | +| `file` | `File to create. Must have a .db extension.` | +| `source` (optional) | `Optional provider source: a .db file, an exported .evtx file, or a folder containing .db and/or .evtx files (top-level only). When omitted, local providers on this machine are used. When supplied, ONLY the source is used (no fallback to local providers).` | +| `--filter` | `Only providers matching specified regex string will be added to the database.` | +| `--skip-providers-in-file` | Excludes any provider name found in the supplied source. Useful for differencing — e.g., capture a fresh-OS database first, then create an Exchange-only database with `--skip-providers-in-file fresh-os.db` to omit OS providers and keep only what Exchange added. | +| `--verbose` | `Enable verbose logging. May be useful for troubleshooting.` | + +### `eventdbtool merge` + +``` +eventdbtool merge [--overwrite] [--verbose] +``` + +> Copies providers from a source into a target database. + +The target must already exist and be at the current schema version (run `upgrade` first if not). + +| Argument / option | Description | +| --- | --- | +| `source` | `The provider source: a .db file, an exported .evtx file, or a folder containing .db and/or .evtx files (top-level only).` | +| `target db` | `The target database.` | +| `--overwrite` | `When a provider from the source already exists in the target, overwrite the target data with the source data. The default is to skip providers that already exist.` | +| `--verbose` | `Enable verbose logging. May be useful for troubleshooting.` | + +### `eventdbtool diff` + +``` +eventdbtool diff [--verbose] +``` + +> Given two provider sources (each may be a .db, an exported .evtx, or a folder containing them), produces a database containing all providers from the second source which are not in the first source. + +| Argument / option | Description | +| --- | --- | +| `first source` | `The first source to compare: a .db, an exported .evtx, or a folder containing .db and/or .evtx files (top-level only).` | +| `second source` | `The second source to compare: a .db, an exported .evtx, or a folder containing .db and/or .evtx files (top-level only).` | +| `new db` | `The new database containing only the providers in the second source which are not in the first source. Must have a .db extension.` | +| `--verbose` | `Verbose logging. May be useful for troubleshooting.` | + +### `eventdbtool upgrade` + +``` +eventdbtool upgrade [--verbose] +``` + +> Upgrades the database schema + +No-op when the database is already at the current version. v1 / v2 databases are not upgradable in place — recreate them with `eventdbtool create`. + +| Argument / option | Description | +| --- | --- | +| `file` | `The database file to upgrade.` | +| `--verbose` | `Verbose logging. May be useful for troubleshooting.` | + +[Docs home](Home.md) diff --git a/docs/ProviderDatabases.md b/docs/ProviderDatabases.md deleted file mode 100644 index d5556f34..00000000 --- a/docs/ProviderDatabases.md +++ /dev/null @@ -1,25 +0,0 @@ -# [EventLogExpert](Home.md) - -## Provider databases - -EventLogExpert can be used to view event descriptions for events generated by products that are not installed on the user's workstation. An event database must be created to enable this functionality. - -By default, EventLogExpert will simply use the event provider DLLs available on the local machine to resolve event descriptions. If EventLogExpert is being used on a user workstation, and the Application event log from an Exchange Server is opened, many of the events will not have descriptions, because those provider DLLs are not present. In order to view those events, use the following steps: - -* Download eventdbtool.exe from the latest GitHub release. -* Copy eventdbtool to a machine with the product installed, such as Exchange Server in this example. -* Create a database for that server and give the file a name that indicates where it came from. For example: - - `eventdbtool create "C:\EXCH1.db"` - -* This database contains the provider information for everything on that server, including Windows, Exchange Server, and anything else installed. If you like, you can use the database as-is. -* eventdbtool also provides the ability to diff databases against each other. This can be useful to separate OS databases from product databases. For example, in our example here, if Exchange 2019 is installed on a Windows 2019 server, we might want to diff the database we just created against a database from a plain Windows 2019 server with nothing else on it. This would produce a database that only has event providers for Exchange. This can be done with a command such as: - - `.\eventdbtool diff "C:\Windows 2019.db" "C:\EXCH1.db" "C:\Exchange 2019.db"` - -* Now we have Exchange 2019.db that only has event providers which were not present in the Windows 2019 database, so it is a database just for that product (and any other products that were installed on that machine). This step is optional. -* Go to Tools -> Settings -> Add Provider and choose the database to import. - -As long as at least one database is enabled in Tools -> Options, EventLogExpert will only use those databases for event resolution and will ignore any provider DLLs on the local machine. To switch back to local machine providers, disable all the databases in Tools -> Options. - -[Docs home](Home.md) diff --git a/docs/Saved-Filters.md b/docs/Saved-Filters.md new file mode 100644 index 00000000..3767214e --- /dev/null +++ b/docs/Saved-Filters.md @@ -0,0 +1,59 @@ +# [EventLogExpert](Home.md) + +## Saved Filters + +Two separate persisted surfaces, both reached from the `View` menu: + +- `View` → `Show Cached Filters` opens the **filter cache** modal — a flat list of single-expression filter strings split into `Favorite Filters` and `Recent Filters` sections. +- `View` → `Show Filter Groups` opens the **filter groups** modal — named, structured collections of full filters (with categories, evaluators, comparison values, and per-filter highlight colors). + +The two have different shapes and different intended uses. The cache is a one-string-per-entry shortcut for the comparison values you keep typing. Groups are reusable filter sets you assemble once and reapply or share. + +### Filter cache (`Show Cached Filters`) + + ![Filter cache modal](.images/filter-cache-modal.png) + +**`Recent Filters`.** Every time a filter with a non-empty comparison value is added (basic, advanced, or exclusion), the comparison string is enqueued into the recent list. The list caps at 20 entries; older entries roll off. When the same string is added again it isn't re-added. Empty when no filter has been added yet (`No Recent Filters`). + +**`Favorite Filters`.** A separately-tracked list with no size cap. Click the outline-star on a recent entry to promote it to favorites; click the filled-star on a favorite entry to demote it back to the recent list. Stars only ever copy a string into favorites — the recent entry is left in place; if the favorite is later un-starred, the same string ends up back in the recent queue. + +**Apply.** The `+` button on any entry adds a new `Cached` filter row to the filter pane using that string as the value, then closes the modal. + +**Import / Export.** The footer's `Import` and `Export` buttons read and write a JSON list of strings — only the favorites snapshot. Imported entries are merged into the existing favorites (no duplicates added). + +The cache persists across app sessions in user preferences. + +### Filter groups (`Show Filter Groups`) + + ![Filter groups modal](.images/filter-groups-modal.png) + +A filter group is a named collection of full filters — each with its own category / evaluator / comparison text / highlight color and any sub-filters. Groups can be organized into sections (the section name is the prefix before `\` in the group name, e.g. `Exchange\HUB Server` lives under section `Exchange` with display name `HUB Server`). Groups with no `\` in the name appear at the modal's top level. + +Per-group buttons (when the group is not in edit mode): + +| Button | Behavior | +| --- | --- | +| `Apply Filters` | Adds this group's filters to the current filter pane, skipping any whose comparison text + include/exclude flag already exists in the pane. Closes the modal afterwards. Existing pane filters are not touched. | +| `Copy` | Copies the group's filter expressions to the clipboard, joined with ` || ` if more than one filter. | +| `Export` | Saves the entire group (name + filters) as a JSON file. | +| `Edit` | Switches the group into edit mode (per-row controls, `Add Filter`, `Save`, `Cancel`, `Import`, `Remove`). | +| `Remove` | Deletes the group. | + +In edit mode each filter row gets the same chrome as the filter pane (toggle enable/exclusion, edit, save, remove); plus per-row highlight color picker. `Save` writes back when no row is mid-edit and no draft is unsaved. + +The pencil icon next to the group name renames it. Empty names are rejected. The new name's `\` segment becomes the new section prefix. + +`Create Group` at the bottom of the modal creates a new group named `New Filter Section\New Filter Group` (in section `New Filter Section`); rename it before saving filters into it. Group creation also seeds the `Save All Filters` flow on the `Edit` menu — that command prompts for a `Group Name` and saves the current filter pane as a new group with that name. + +**Modal-level Import / Export.** The footer reads and writes JSON files containing the **entire** groups list. `Export` saves every group; `Import` reads a list of groups and adds them to whatever's already there (no merge by name, so re-importing the same file produces duplicates). + +**Per-group `Export`** (button in the row's chrome) saves a single group as JSON. **Per-group `Import`** (in edit mode) replaces *this* group's name and filters with the contents of the picked file — useful for swapping the body of an existing group without creating a new one. + +Filter groups persist across app sessions in user preferences. + +### Cache vs. Groups: when to use which + +- A single comparison string you keep retyping into the same one-field basic filter → cache it. Use `Add Cached Filter` from the filter pane and pick the value from the cache dropdown. +- A reusable set of filters that belongs together (e.g., "Exchange transport service errors") → make a group. Apply from the group row; share with `Export` / `Import`. + +[Docs home](Home.md) diff --git a/docs/Settings.md b/docs/Settings.md new file mode 100644 index 00000000..8561dd91 --- /dev/null +++ b/docs/Settings.md @@ -0,0 +1,63 @@ +# [EventLogExpert](Home.md) + +## Settings + +`Tools` → `Settings` opens the Settings modal. + +`Save` writes the form fields and any pending enable/disable toggles you've made on database rows; `Exit` discards them. `Import Database`, `Remove`, and `Upgrade` are immediate side effects — they run as soon as you click and persist regardless of `Save` / `Exit`. + + ![Settings modal](.images/settings-modal.png) + +### Time Zone + +Drop-down of every system time zone. Event timestamps in the table, the Details pane, and the Date filter are all rendered in the selected zone. Changing this re-renders open logs in place; it doesn't reload them. + +Set this to match the source machine, the customer's locale, or your own — whatever lines up most clearly with the events you're reading. Combined views from machines in different zones use this single zone for sorting and display. + +### Databases + +Lists every imported provider database with its current status and per-row controls (enable / disable, Upgrade when offered, Remove). The `Import Database` button opens a multi-file picker that accepts `.db` files and `.zip` archives containing them; conflicting filenames prompt to overwrite or skip. + +A row badge shows the current state. While the initial pass is running, a `Classifying databases…` banner sits above the list: + +| Badge | Meaning | +| --- | --- | +| (none) | `Ready` (loaded and usable) — or `Upgrade required`, in which case the row's `Upgrade` button replaces the badge as the visible affordance. | +| `Upgrade failed` | The most recent upgrade attempt failed; the row offers `Retry Upgrade`. Re-import or remove if the retry keeps failing. | +| `Recovery required` | A previous upgrade left a backup file in place; the original is still safe but needs reconciliation before the row goes back to `Ready`. | +| `Unrecognized` | The file isn't a database produced by this tool. | +| `Obsolete` | A v1 / v2 database from a long-superseded build of the tool; not upgradable in place — recreate with `eventdbtool create`. | +| `Classification failed` | Initial classification threw; details surface in `View Logs`. | + +Closing the modal after enabling, disabling, or removing a database prompts to reload all open logs so resolution reflects the new set. See [Provider Databases](Provider-Databases.md) for the rationale and the `eventdbtool` CLI reference. + +### Expand Display Pane On Selection Change + +When `True`, the Details pane re-expands every time the selection changes, even if it was manually collapsed for the previous event. When `False`, a manual collapse stays collapsed until the pane is re-expanded by hand. + +### Theme + +`Follow System` (default), `Light`, or `Dark`. `Follow System` tracks the current Windows app-mode preference and switches with it. + +### Keyboard Copy Behavior + +Selects which copy format Ctrl+C uses on the event table: + +| Value | Output | +| --- | --- | +| `Default` | One quoted, space-separated field per visible event-table column, plus the description. | +| `Simple` | Five quoted, space-separated fields: level, timestamp, source, event id, description. | +| `Xml` | The event's XML, pretty-printed when parseable. | +| `Full` | A multi-line block with labeled fields (`Log Name`, `Source`, `Date`, `Event ID`, `Task Category`, `Level`, `Keywords`, `User`, `Computer`, `Description`, `Event Xml`). | + +The Edit menu always exposes all four formats explicitly (`Copy Selected`, `Copy Selected (Simple)`, `Copy Selected (XML)`, `Copy Selected (Full)`); the `Ctrl+C` shortcut hint moves to whichever entry matches the current setting. See [Keyboard and Copy](Keyboard-And-Copy.md). + +### Logging Level + +Controls the verbosity of the in-app debug log surfaced by `Help` → `View Logs`. Lower levels produce more rows and slow logging-heavy operations slightly; raise it before reproducing an issue you intend to report. + +### Pre-release Builds + +A footer toggle. When `True`, `Help` → `Check for Updates` includes pre-release GitHub releases as candidates. Stable releases are always considered regardless of this setting. + +[Docs home](Home.md) diff --git a/docs/Updates-And-Diagnostics.md b/docs/Updates-And-Diagnostics.md new file mode 100644 index 00000000..503c42cc --- /dev/null +++ b/docs/Updates-And-Diagnostics.md @@ -0,0 +1,51 @@ +# [EventLogExpert](Home.md) + +## Updates and Diagnostics + +The `Help` menu hosts everything related to the build you're running and its diagnostic surface. + +### Docs + +Opens this docs site in the default browser. + +### Submit an Issue + +Opens the GitHub issue tracker in the default browser, with the new-issue form pre-selected. No data leaves the app — the form is blank, you fill it in. + +### Check for Updates + +Triggers an immediate check against the GitHub releases feed. Stable releases are always considered. When `Tools` → `Settings` → `Pre-release Builds` is enabled, pre-release tags are also considered. + +The `.appinstaller` distributed with each release also wires up app-installer-driven background update checks on every launch, so this entry is mostly for "what's the latest right now" — the app finds new releases on its own. + +### Release Notes + +Opens the Release Notes modal, which renders the markdown body of the published GitHub release for the running build. If the release body for the current version couldn't be fetched (no network, version not found), an alert titled `Release Notes Failure` appears instead and the modal stays closed. + +### View Logs + +Opens the Debug Log modal — the in-app view of the rolling diagnostic log written by the running session. The same log is also accessible as a file under the per-user app data directory; `View Logs` is the in-app surface. + + ![Debug Log modal](.images/debug-log-modal.png) + +Filter bar: + +| Control | Behavior | +| --- | --- | +| `Level` operator | `Equals`, `Not Equal`, or `Multi Select`. | +| `Level` value | Single dropdown when the operator is `Equals` or `Not Equal` (with `All` to disable the filter); multi-select dropdown when the operator is `Multi Select`. | +| `Filter messages...` | Free-text substring filter applied to the message column. Case-insensitive. | + +Footer: + +| Control | Behavior | +| --- | --- | +| `Export` | Saves the currently-filtered rows to a file (file dialog). | +| `Copy` | Copies the currently-filtered rows to the clipboard. | +| ` of entries` | Live counter — filtered rows over total rows. | +| `Refresh` | Re-reads the on-disk log file. | +| `Clear` | Truncates the on-disk log file and the in-memory view. There is no confirmation. | + +Set `Tools` → `Settings` → `Logging Level` to a more verbose value before reproducing an issue you intend to report; both `Export` and `Copy` honor whatever the filter bar is currently showing, so narrow to the relevant rows first. + +[Docs home](Home.md) diff --git a/docs/Viewing-Events.md b/docs/Viewing-Events.md new file mode 100644 index 00000000..bf8d5346 --- /dev/null +++ b/docs/Viewing-Events.md @@ -0,0 +1,52 @@ +# [EventLogExpert](Home.md) + +## Viewing Events + +The main view has three regions: the **tab strip** (one tab per open log, plus a `Combined` tab when more than one log is open), the **event table**, and the **Details pane** (collapsible, bottom). The status bar runs along the very bottom — see [Opening Logs](Opening-Logs.md#live-log-behavior) for what it shows for live logs. + + ![Main view: tabs, event table, Details pane](.images/EventLogExpert-CombinedView.png) + +### Tab strip + +- One tab per open log. The tab label is the log's short name (file name for `.evtx`, channel name for live logs). The tab tooltip shows the full path / channel name. +- A `Combined` tab appears when two or more logs are open. It shows every event from every open log interleaved by time and rendered in the configured time zone. +- Click a tab to switch to it. The `×` on each per-log tab closes just that log; `Combined` has no close button and disappears on its own when the open-log count drops below two. +- A tab spinner appears next to the label while a log is loading. + +### Event table + +The table is virtualized — only the rows currently in view are rendered, so loading large `.evtx` files stays responsive. + +**Configurable columns.** Right-click a column header to open the column menu: + +- A toggle per column (checked = visible). The available columns are `Level`, `Date and Time`, `Activity ID`, `Log`, `Computer Name`, `Source`, `Event ID`, `Task Category`, `Keywords`, `Process ID`, `Thread ID`, and `User`. The `Description` column is fixed and always rightmost. +- An `Order By` submenu pinned to the same set of columns. The checked column is the current sort key. +- `Reset Column Defaults` returns the visibility, ordering, and sort to first-launch state. + +The current sort indicator (a caret) appears in the active column header; clicking it flips between ascending and descending. + +**Column reordering.** Drag a column header sideways to drop it before or after another column. The new order persists across sessions until `Reset Column Defaults` (in the column menu) restores it. + +**Column sizing.** Drag a column-header edge to resize. Sizes persist across sessions; `Reset Column Defaults` restores the built-in widths along with visibility, ordering, and sort. + +**Per-row highlighting.** When a filter has a `Highlight Color` set, every event matching that filter is rendered with that background color. The configured colors live alongside the filter — see [Filtering](Filtering.md). When several enabled, non-excluded filters could highlight the same row, the first one in pane order wins. + +**Selection.** Click to select. Ctrl+Click toggles individual rows. Shift+Click selects a range from the anchor to the clicked row. Arrow keys, Page Up / Page Down, Home, and End move within the table; Shift + those keys extends the selection. `Ctrl+A` selects every visible row; `Escape` clears the selection. The selection drives both the `Ctrl+C` clipboard copy (see [Keyboard and Copy](Keyboard-And-Copy.md)) and the Details pane. + +**Right-click on a row.** Opens a context menu: + +- `Copy Selected` / `Copy Selected (Simple)` / `Copy Selected (XML)` / `Copy Selected (Full)` — same four formats as the `Edit` menu. +- `Exclude Events Before` / `Exclude Events After` — sets a date filter using the right-clicked event's timestamp as the boundary. +- `Include` and `Exclude` submenus — each lists the filter categories applicable to a single field comparison. Picking one creates a new basic filter (or exclusion) for that field equal to the right-clicked event's value. Today this works for `Event ID`, `Activity ID`, `Level`, `Keywords`, `Source`, and `Task Category`; the `Process ID`, `Thread ID`, and `User ID` items are present in the menu but produce empty filter values, so they currently no-op. + +### Details pane + +The Details pane sits at the bottom of the window. It hides itself when no event is selected. The header expand/collapse arrow shows the same content; behavior on selection-change is governed by `Tools` → `Settings` → `Expand Display Pane On Selection Change`. + +The top of the pane shows the same fields as a Windows Event Viewer details view: `Log Name`, `Source`, `Event Id`, `Level`, `Keywords` (only when present), and `Date and Time`. Below those, the `Description` paragraph is the resolved event description text (the same text the table previews in the `Description` column). + +Below the description, an `XML` toggle expands the raw event XML. The XML is resolved on demand the first time the toggle is opened for a given event — the placeholder text is `Resolving XML...` until resolution completes. Events with no XML available render `No XML available for this event.`. + +The pane can be resized vertically by dragging the splitter at the top. + +[Docs home](Home.md) diff --git a/docs/Viewing.md b/docs/Viewing.md deleted file mode 100644 index 253e94ef..00000000 --- a/docs/Viewing.md +++ /dev/null @@ -1,28 +0,0 @@ -# [EventLogExpert](Home.md) - -## Selecting, scrolling, and reading events - -* Events can be selected with a mouse click. -* Tab moves the selection to the next event. -* Shift-Tab moves the selection to the previous event. -* Arrow keys can be used to scroll the view up or down. -* Page Up/Page Down can also be used to scroll the view up or down. -* When an event is selected, the Description of that event appears in the pane at the bottom of the window. -* The arrow toggle at the very bottom right shows the XML for the event. -* The bottom pane can be resized by dragging. -* The bottom pane can be collapsed with the arrow toggle at the top right of that pane. - -## Viewing multiple log files at once - -* When more than one log is opened in the same window, a Combined tab appears which shows all the event logs combined, normalized ot the same time zone, and sorted by time. -* To help distinguish between events from different logs, the View menu has two options: - * Show Log Name Column - adds a column showing the file name of the log, if it is a file, or the log name of the live log. - * Show Computer Name column - adds a column showing the computer name stored in the event log. - -## Viewing live logs - -* When a live log is open, new events arriving from that log will be stored in a buffer. This is indicated by the New Events number shown in the status bar at the bottom of the window. -* From the View menu, choose Load New Events to add those new events to the view. -* Choosing Continuously Update from the View menu will cause those events to be added to the view immediately as they arrive. - -[Docs home](Home.md) From a9e6bc82a59902f1c878ee178171639f861b4f50 Mon Sep 17 00:00:00 2001 From: jschick04 Date: Wed, 13 May 2026 21:25:41 -0500 Subject: [PATCH 2/3] Refresh README features and install instructions --- README.md | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 2dd33bda..5a9e978e 100644 --- a/README.md +++ b/README.md @@ -6,42 +6,40 @@ A Windows Event Log viewer for tech support and IT professionals. ## Key features -* Quickly load huge .evtx files. File -> Open and select multiple files, or just drag-and-drop them into the view. The tool will happily load multiple .evtx files concurrently. -* View multiple .evtx files in an interleaved combined view and examine how events line up across multiple servers. -* See event description previews right in the table without having to open each individual event. -* Filter using friendly drop-downs, use Advanced Filter and enter a LINQ expression, or combine both. -* Create an event database to view .evtx files on computers that don't have the same product installed. For example, view Exchange Server or SQL Server logs on a user workstation. -* Can be used as a replacement for Event Viewer to view live event logs. Choose Continuously Update on the View menu and watch new events appear in real time. +* Loads `.evtx` files concurrently — `File` → `Open`, drag-and-drop, or open every `.evtx` in a folder in one step. +* Combined view interleaves events from any mix of file and live logs by time across multiple machines. +* Configurable event-table columns (visibility, ordering, sort) with per-row highlight colors driven by your filters. +* Filter pane with Basic (category × evaluator) filters, sub-filters joined with `AND` / `OR`, Date filter, Advanced Dynamic LINQ expressions, and Exclusion filters. +* Filter Cache (Favorites + Recent) and named, importable / exportable Filter Groups. +* Live event channels with auto-discovery (admin-only channels disabled when not elevated), `Continuously Update`, and a `Load New Events` buffered mode. +* Provider Databases — load `.db` files captured on another machine so its `.evtx` files resolve descriptions and task categories correctly. +* In-line description previews in the table; on-demand event XML in the Details pane. +* Configurable Ctrl+C copy mode (`Default`, `Simple`, `XML`, `Full`); System / Light / Dark theme. +* In-app Release Notes and Debug Log viewer; opt-in pre-release update channel. For more information, check our [docs](docs/Home.md). ## Quick Start -### Windows 10 or 11 +Download the `EventLogExpert__x64.appinstaller` (or the matching `EventLogExpert__x64.msix`) from the latest release and run it: . -Simply download the `EventLogExpert*.msix` file from the latest and run it: [https://github.com/microsoft/EventLogExpert/releases/latest/](https://github.com/microsoft/EventLogExpert/releases/latest/). +The `.appinstaller` declares its dependency on the Windows App Runtime (currently `Microsoft.WindowsAppRuntime.1.7.msix`, also published in the same release) so App Installer fetches the runtime automatically on a clean machine. Updates are checked on launch. -### Windows Server 2019 or 2022 +If you'd rather install the runtime manually first, grab `Microsoft.WindowsAppRuntime.1.7.msix` from the release and install it with: -Note: Auto-updates do not work on 2019. +``` +Add-AppxPackage $home\Downloads\Microsoft.WindowsAppRuntime.1.7.msix +``` -* Download the `EventLogExpert*.msix`. -* Windows 2019 will also need the `Microsoft.WindowsAppRuntime*.msix` unless it was already installed by something else. You'll find this file in the release with the `EventLogExpert*.msix`. -* Enable sideloading: +Then install the app: - `Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock -Name AllowAllTrustedApps -Value 1` - -* Install the runtime with Add-AppxPackage. Example: - - `Add-AppxPackage $home\Downloads\Microsoft.WindowsAppRuntime.1.2.msix` - -* Install EventLogExpert: - - `Add-AppxPackage $home\Downloads\EventLogExpert_23.5.19.1256_x64.msix` +``` +Add-AppxPackage $home\Downloads\EventLogExpert__x64.msix +``` ### First time setup -Head over to our [docs](docs/Home.md). +Head over to our [docs](docs/Settings.md). ## Contributing From 6be394dd42cf60861cd7261c1ef5f085f8af6cf0 Mon Sep 17 00:00:00 2001 From: jschick04 Date: Wed, 13 May 2026 21:42:55 -0500 Subject: [PATCH 3/3] Address Copilot PR review: drop unimplemented Alt/F10 binding, quote --skip-providers-in-file verbatim, neutralize broken image placeholders --- docs/.images/debug-log-modal.png | Bin 0 -> 43381 bytes docs/.images/filter-cache-modal.png | Bin 0 -> 11306 bytes docs/.images/filter-groups-modal.png | Bin 0 -> 63648 bytes docs/.images/settings-modal.png | Bin 0 -> 28278 bytes docs/Filtering.md | 4 ++-- docs/Keyboard-And-Copy.md | 7 +++---- docs/Provider-Databases.md | 5 +++-- docs/Saved-Filters.md | 4 ++-- docs/Settings.md | 9 ++++++--- docs/Updates-And-Diagnostics.md | 2 +- 10 files changed, 17 insertions(+), 14 deletions(-) create mode 100644 docs/.images/debug-log-modal.png create mode 100644 docs/.images/filter-cache-modal.png create mode 100644 docs/.images/filter-groups-modal.png create mode 100644 docs/.images/settings-modal.png diff --git a/docs/.images/debug-log-modal.png b/docs/.images/debug-log-modal.png new file mode 100644 index 0000000000000000000000000000000000000000..f08080fe59a5e0b8a50eb7b5a0cb625cb1b09fce GIT binary patch literal 43381 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 literal 0 HcmV?d00001 diff --git a/docs/.images/filter-cache-modal.png b/docs/.images/filter-cache-modal.png new file mode 100644 index 0000000000000000000000000000000000000000..4dc0d598af6e04e94c11ac57932419279d50d26e GIT binary patch literal 11306 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 XK`}BqdKjny23@{*4N`jk_7DFHPu|ce literal 0 HcmV?d00001 diff --git a/docs/.images/filter-groups-modal.png b/docs/.images/filter-groups-modal.png new file mode 100644 index 0000000000000000000000000000000000000000..482354ef406b4edccdb196116fa3450b9656f2b7 GIT binary patch literal 63648 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 literal 0 HcmV?d00001 diff --git a/docs/.images/settings-modal.png b/docs/.images/settings-modal.png new file mode 100644 index 0000000000000000000000000000000000000000..44c2ff3d77d854588bf6224347284bdddf0d4e5b GIT binary patch literal 28278 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

Y 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 LWvQ=EP5k}`%I)0H literal 0 HcmV?d00001 diff --git a/docs/Filtering.md b/docs/Filtering.md index 240a410a..d7010e83 100644 --- a/docs/Filtering.md +++ b/docs/Filtering.md @@ -14,7 +14,7 @@ The Filter pane sits above the event table. Every event in the active log set is Each saved row carries a chrome strip with `Edit`, `Exclude` (or `Include` when the row is already an exclusion), `Remove`, and a `Disable` / `Enable` toggle. While editing, the chrome shows `Save` and `Cancel`. Non-exclusion rows also show a highlight-color picker (`Highlight Color`) before the comparison content. When any filter is being applied, the pane shows `[Applying Filters]` with a spinner; otherwise it shows `[Active Filters: N]`. The pane can be collapsed via the caret in the top-right corner. -`Edit` → `Save All Filters` and `Edit` → `Clear All Filters` operate on the entire pane — see [Keyboard and Copy](Keyboard-And-Copy.md). `View` → `Show All Events` (`Ctrl+H`) suspends evaluation without removing any filters. +`Edit` → `Clear All Filters` removes every filter row and the date filter from the pane in one step. `Edit` → `Save All Filters` persists only the filter rows — the date filter is not part of a saved group. See [Keyboard and Copy](Keyboard-And-Copy.md). `View` → `Show All Events` (`Ctrl+H`) suspends evaluation without removing any filters. ### Basic filters @@ -87,7 +87,7 @@ Available properties: ### Excluded filters -Either an `Add Exclusion` row from the start, or any Basic / Advanced row toggled with the `Exclude` chrome button. Matching events are hidden. Excluded filters are evaluated independently of `View` → `Show All Events`: the show-all toggle disables only the inclusion side, so exclusions and the date filter remain in effect when it's on. To suspend everything at once, use `Edit` → `Clear All Filters`. +Either an `Add Exclusion` row from the start, or any Basic / Advanced row toggled with the `Exclude` chrome button. Matching events are hidden. Excluded filters are evaluated independently of `View` → `Show All Events`: the show-all toggle disables only the inclusion side, so exclusions and the date filter remain in effect when it's on. `Edit` → `Clear All Filters` removes every filter from the pane (including the date filter and exclusions) — there's no built-in way to reversibly suspend everything at once. ### Cached filters diff --git a/docs/Keyboard-And-Copy.md b/docs/Keyboard-And-Copy.md index 3579aece..3445943f 100644 --- a/docs/Keyboard-And-Copy.md +++ b/docs/Keyboard-And-Copy.md @@ -13,19 +13,18 @@ The `Edit` menu always lists all four copy formats: | `Copy Selected (XML)` | `Xml` | The event's XML, pretty-printed when parseable. | | `Copy Selected (Full)` | `Full` | A multi-line block with labeled fields (`Log Name`, `Source`, `Date`, `Event ID`, `Task Category`, `Level`, `Keywords`, `User`, `Computer`, `Description`, `Event Xml`). | -`Ctrl+C` invokes whichever format `Tools` → `Settings` → `Keyboard Copy Behavior` is set to. The `Ctrl+C` shortcut hint in the `Edit` menu moves to that entry so the keyboard binding is always visible. `Default` is the initial setting. +`Ctrl+C` invokes whichever format `Tools` → `Settings` → `Keyboard Copy Behavior` is set to. The `Ctrl+C` shortcut hint in the `Edit` menu moves to that entry so the keyboard binding is always visible. `Full` is the initial setting on a fresh install. Multi-selection is honored — every selected row is included in the copied payload in the order they appear. -`Save All Filters` and `Clear All Filters` also live on the `Edit` menu. `Save All Filters` prompts for a `Group Name` (default `New Filter Section\New Filter Group`) and saves the current filter pane as a named filter group — see [Saved Filters](Saved-Filters.md). `Clear All Filters` removes every filter from the pane in one step, including the date filter. +`Save All Filters` and `Clear All Filters` also live on the `Edit` menu. `Save All Filters` prompts for a `Group Name` (default `New Filter Section\New Filter Group`) and saves the current filter rows as a named filter group — the date filter is not included. See [Saved Filters](Saved-Filters.md). `Clear All Filters` removes every filter row and the date filter from the pane in one step. ### Menu navigation -The menu bar follows WAI-ARIA menubar conventions: +The menu bar follows WAI-ARIA menubar conventions. Once a menu-bar button has focus (Tab in from elsewhere or click one open): | Key | Action | | --- | --- | -| `Alt` (or `F10`) | Move focus to the menu bar. | | `ArrowLeft` / `ArrowRight` | Move between top-level menus. Wraps. If a menu is open, switches to the new menu. | | `Home` / `End` | Jump to the first or last top-level menu. | | `ArrowDown` | Open the focused menu, with focus on the first item. | diff --git a/docs/Provider-Databases.md b/docs/Provider-Databases.md index 64e08e3e..84b5403f 100644 --- a/docs/Provider-Databases.md +++ b/docs/Provider-Databases.md @@ -12,7 +12,7 @@ When at least one database is enabled in `Tools` → `Settings`, providers are r 2. Then the enabled databases, in load order — the first database that knows the provider wins. 3. Then the local machine's installed providers as a fallback. -Disable all databases (or remove them) to fall back entirely to local providers. +Disabling a database skips it from step 2 only. Exported logs that ship with sibling `LocaleMetaData/*.MTA` files still resolve via those (step 1), and any provider not resolved by databases still falls through to local providers (step 3). ### Lifecycle (Settings → Databases) @@ -21,6 +21,7 @@ Disable all databases (or remove them) to fall back entirely to local providers. | Status | Behavior | | --- | --- | | `Ready` | Loaded and used to resolve events. | +| `Classifying…` | Initial classification pass hasn't reached this row yet. The enable / disable toggle is suppressed until classification completes. The same state is reflected by the top-of-list `Classifying databases…` banner. | | `Upgrade required` | Schema is older than the running build but in-place upgrade is supported. The row's `Upgrade` button performs the migration in place; a backup of the original is kept on disk. | | `Upgrade failed` | Most recent upgrade attempt failed. Use `Retry Upgrade`, re-import, or remove. | | `Recovery required` | A previous upgrade left a backup; the original is still safe but the row needs reconciliation before going back to `Ready`. | @@ -69,7 +70,7 @@ The `` argument must end in `.db` and must not already exist. | `file` | `File to create. Must have a .db extension.` | | `source` (optional) | `Optional provider source: a .db file, an exported .evtx file, or a folder containing .db and/or .evtx files (top-level only). When omitted, local providers on this machine are used. When supplied, ONLY the source is used (no fallback to local providers).` | | `--filter` | `Only providers matching specified regex string will be added to the database.` | -| `--skip-providers-in-file` | Excludes any provider name found in the supplied source. Useful for differencing — e.g., capture a fresh-OS database first, then create an Exchange-only database with `--skip-providers-in-file fresh-os.db` to omit OS providers and keep only what Exchange added. | +| `--skip-providers-in-file` | `Any providers found in the specified source (a .db file, an exported .evtx file, or a folder containing them, top-level only) will not be included in the new database. For example, when creating a database of event providers for Exchange Server, it may be useful to provide a database of all providers from a fresh OS install with no other products. That way, all the OS providers are skipped, and only providers added by Exchange or other installed products would be saved in the new database.` | | `--verbose` | `Enable verbose logging. May be useful for troubleshooting.` | ### `eventdbtool merge` diff --git a/docs/Saved-Filters.md b/docs/Saved-Filters.md index 3767214e..bbdf7950 100644 --- a/docs/Saved-Filters.md +++ b/docs/Saved-Filters.md @@ -34,7 +34,7 @@ Per-group buttons (when the group is not in edit mode): | Button | Behavior | | --- | --- | | `Apply Filters` | Adds this group's filters to the current filter pane, skipping any whose comparison text + include/exclude flag already exists in the pane. Closes the modal afterwards. Existing pane filters are not touched. | -| `Copy` | Copies the group's filter expressions to the clipboard, joined with ` || ` if more than one filter. | +| `Copy` | Copies the group's filter expressions to the clipboard. With multiple filters, each is wrapped in parentheses and joined with the Dynamic LINQ OR operator so the result is a single Advanced expression you can paste back into the filter pane. | | `Export` | Saves the entire group (name + filters) as a JSON file. | | `Edit` | Switches the group into edit mode (per-row controls, `Add Filter`, `Save`, `Cancel`, `Import`, `Remove`). | | `Remove` | Deletes the group. | @@ -43,7 +43,7 @@ In edit mode each filter row gets the same chrome as the filter pane (toggle ena The pencil icon next to the group name renames it. Empty names are rejected. The new name's `\` segment becomes the new section prefix. -`Create Group` at the bottom of the modal creates a new group named `New Filter Section\New Filter Group` (in section `New Filter Section`); rename it before saving filters into it. Group creation also seeds the `Save All Filters` flow on the `Edit` menu — that command prompts for a `Group Name` and saves the current filter pane as a new group with that name. +`Create Group` at the bottom of the modal creates a new group named `New Filter Section\New Filter Group` (in section `New Filter Section`); rename it before saving filters into it. Group creation also seeds the `Save All Filters` flow on the `Edit` menu — that command prompts for a `Group Name` and saves the current filter rows as a new group with that name. Saved groups persist filter rows only; the date filter is stored separately and is not part of a group. **Modal-level Import / Export.** The footer reads and writes JSON files containing the **entire** groups list. `Export` saves every group; `Import` reads a list of groups and adds them to whatever's already there (no merge by name, so re-importing the same file produces duplicates). diff --git a/docs/Settings.md b/docs/Settings.md index 8561dd91..35dac16d 100644 --- a/docs/Settings.md +++ b/docs/Settings.md @@ -4,7 +4,7 @@ `Tools` → `Settings` opens the Settings modal. -`Save` writes the form fields and any pending enable/disable toggles you've made on database rows; `Exit` discards them. `Import Database`, `Remove`, and `Upgrade` are immediate side effects — they run as soon as you click and persist regardless of `Save` / `Exit`. +`Save` writes the form fields and any pending enable/disable toggles you've made on database rows; `Exit` discards them. `Remove` and `Upgrade` are immediate side effects that persist regardless of `Save` / `Exit`. `Import Database` is also immediate, but a successful import additionally applies any pending form fields and toggles and closes the modal — make any other changes you want to keep before clicking it. ![Settings modal](.images/settings-modal.png) @@ -23,13 +23,16 @@ A row badge shows the current state. While the initial pass is running, a `Class | Badge | Meaning | | --- | --- | | (none) | `Ready` (loaded and usable) — or `Upgrade required`, in which case the row's `Upgrade` button replaces the badge as the visible affordance. | +| `Classifying…` | Initial classification hasn't reached this row yet (also reflected in the top-of-list banner). The enable / disable toggle is suppressed until classification completes. | | `Upgrade failed` | The most recent upgrade attempt failed; the row offers `Retry Upgrade`. Re-import or remove if the retry keeps failing. | | `Recovery required` | A previous upgrade left a backup file in place; the original is still safe but needs reconciliation before the row goes back to `Ready`. | | `Unrecognized` | The file isn't a database produced by this tool. | | `Obsolete` | A v1 / v2 database from a long-superseded build of the tool; not upgradable in place — recreate with `eventdbtool create`. | | `Classification failed` | Initial classification threw; details surface in `View Logs`. | -Closing the modal after enabling, disabling, or removing a database prompts to reload all open logs so resolution reflects the new set. See [Provider Databases](Provider-Databases.md) for the rationale and the `eventdbtool` CLI reference. +Enabling or disabling a database is a pending change — closing the modal afterwards prompts to reload all open logs so resolution reflects the new set. `Remove` is immediate: removing a `Ready` and enabled database while logs are open prompts a confirmation that warns affected log views will be closed and reopened, and the reload happens right then (no modal-close prompt afterwards). Removing a database that's disabled or not `Ready` only asks for confirmation and skips the reload. + +See [Provider Databases](Provider-Databases.md) for the rationale and the `eventdbtool` CLI reference. ### Expand Display Pane On Selection Change @@ -54,7 +57,7 @@ The Edit menu always exposes all four formats explicitly (`Copy Selected`, `Copy ### Logging Level -Controls the verbosity of the in-app debug log surfaced by `Help` → `View Logs`. Lower levels produce more rows and slow logging-heavy operations slightly; raise it before reproducing an issue you intend to report. +The threshold for what gets written to the in-app debug log surfaced by `Help` → `View Logs`. Anything less verbose than the chosen level is dropped: `Trace` records everything; `Critical` records only the most severe entries. Set this lower (`Debug` or `Trace`) before reproducing an issue you intend to report so the relevant detail is captured; raise it back up after to keep the log small. ### Pre-release Builds diff --git a/docs/Updates-And-Diagnostics.md b/docs/Updates-And-Diagnostics.md index 503c42cc..69aada4a 100644 --- a/docs/Updates-And-Diagnostics.md +++ b/docs/Updates-And-Diagnostics.md @@ -20,7 +20,7 @@ The `.appinstaller` distributed with each release also wires up app-installer-dr ### Release Notes -Opens the Release Notes modal, which renders the markdown body of the published GitHub release for the running build. If the release body for the current version couldn't be fetched (no network, version not found), an alert titled `Release Notes Failure` appears instead and the modal stays closed. +Opens the Release Notes modal, which renders the markdown body of the published GitHub release for the running build. The modal can only render notes that the most recent `Check for Updates` succeeded in fetching for the running version — that means the running version was the newest applicable release at the time of the check. When the running build is behind (a newer release exists), when the version isn't published on GitHub, or when no update check has completed yet, an alert titled `Release Notes Failure` appears instead and the modal stays closed. Run `Check for Updates` first when in doubt. ### View Logs