Quick Answer
Delete or simplify the XPath filter in Event Viewer—limit conditions to 8–10 elements, avoid nested expressions, and use simple comparisons.
Why This Happens
Windows Event Viewer has a hard limit on XPath filter complexity—roughly 10–12 nodes or nested conditions. When you pile on too many and/or clauses, wildcards, or date ranges, the engine chokes and throws ERROR_EVT_FILTER_TOO_COMPLEX (0X00003AB2). I had a client last month who tried to monitor 15 security events across 3 logs with a single filter—took down their entire Event Viewer session. Windows 10/11 and Server 2016+ all hit this limit.
Fix Steps
- Open Event Viewer—run
eventvwr.mscas admin. - Find the filter—click on the custom view or log that’s failing. If the filter is already broken, create a new temporary view with a simple filter (e.g.,
Level = 2) to see if the UI works. - Delete or simplify the filter XML:
- Right-click the custom view → Properties → Edit Filter → XML tab.
- Copy the XPath query to Notepad.
- Remove any
orclauses that aren’t critical. Merge similar conditions (e.g.,EventID=4624 or EventID=4625→ a singleEventIDrange if possible). - Limit to 8–10 nodes max. Example of a too-complex filter:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security">*[System[(EventID=4624 or EventID=4625 or EventID=4634) and (TimeCreated[timediff(@SystemTime) <= 86400000]) and (Security[@UserID='S-1-5-21-...' or @UserID='S-1-5-21-...'])]</Select> </Query> </QueryList> - Simplify to something like:
<QueryList> <Query Id="0" Path="Security"> <Select Path="Security">*[System[(EventID=4624 or EventID=4625) and TimeCreated[timediff(@SystemTime) <= 86400000]]]</Select> </Query> </QueryList>
- Test the filter—click OK. If it still throws the error, remove more conditions.
- If all else fails, delete the custom view and recreate it with a basic filter. Then manually add conditions one by one until it breaks.
Alternative Fixes
- Use PowerShell—
Get-WinEvent -FilterXPathhandles slightly more complex queries than Event Viewer’s GUI. Example:Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4624 or EventID=4625) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" - Split the query—create two or three separate custom views, each simpler. Then use a script or third-party log tool (like LogParser or Graylog) to combine results.
- Check for corrupted filter cache—sometimes a leftover temporary file causes issues. Run
wevtutil elto list logs, thenwevtutil cl "logname"to clear a specific log (be careful—this erases events). Better: delete the%SystemRoot%\System32\winevt\Logs\*.evtxbackup files if you’re certain you don’t need them.
Prevention Tip
Keep filters under 10 conditions. If you need to track 20+ event IDs, use a script or SIEM instead of Event Viewer. I tell clients: “If your filter takes more than 2 lines in Notepad, you’re doing it wrong.”