Log Watcher
The Log Watcher (aka File Watcher) allows the Notifiarr Client to monitor log files for lines matching regular expressions. This is similar to tail -f file | grep pattern - you get notifications when log files contain new lines matching your patterns.
Configuration
Add a new Log Watcher entry in the Notifiarr Client UI under Configuration > Log Watch.
Fields
| Field | Required | Default | Description |
|---|---|---|---|
| Path | Yes | - | Full path to the log file to watch |
| Regex | Yes | - | Regular expression to match - matching lines trigger notifications |
| Skip | No | empty | Regular expression for lines to ignore (even if they match Regex) |
| Poll | No | false |
Use polling instead of inotify (useful for network mounts) |
| Pipe | No | false |
Treat path as a named pipe (FIFO) instead of a file |
| Must Exist | No | false |
Fail if the file doesn't exist at startup |
| Log Match | No | true |
Log matched lines to notifiarr debug log |
Regex Tips
- Use
(?i)at the start for case-insensitive matching - Use
|to match multiple patterns:error|warn|fatal - Escape special characters:
\[,\.,\| - If your skip expression contains
', replace it with.?
Community Patterns
*arr Applications
These patterns catch warnings, errors, and stack traces while filtering common noise.
Radarr
Path:
/var/log/radarr/radarr.debug.txt
Regex:
(?i)(\|warn\||\|error\||^\[v[0-9].+\]|database is locked)
Why this regex?
(?i)- Case-insensitive matching for all patterns\|warn\|- Matches|Warn|log level delimiter in *arr logs\|error\|- Matches|Error|log level delimiter^\[v[0-9].+\]- Matches stack traces that start with any version header (v4, v5, v6, etc.)database is locked- SQLite locking issues that indicate problems
Skip:
(?i)Download client failed to add torrent|Movie with IMDBId|It will not be added|Invalid date found|Validation failed|An unhandled exception has occurred while executing the request.|HttpClient error|TaskManager failed while processing|Task Error|Name does not resolve|429.TooManyRequests
Why skip these?
Download client failed to add torrent- Usually duplicate detection, not a real errorMovie with IMDBId/It will not be added- Informational about skipped moviesInvalid date found- Common indexer feed parsing noiseValidation failed- API validation errors (usually user input issues)An unhandled exception...- Generic wrapper, the actual error is elsewhereHttpClient error- Transient network issues that resolve themselvesTaskManager failed/Task Error- Background task noiseName does not resolve- DNS failures that are usually transient429.TooManyRequests- Rate limiting (expected behavior)
Sonarr
Path:
/var/log/sonarr/sonarr.debug.txt
Regex:
(?i)(\|warn\||\|error\||^\[v[0-9].+\]|database is locked)
Why this regex?
- Same pattern as Radarr - matches warnings, errors, stack traces, and database locks
Skip:
(?i)Download client failed to add torrent|Invalid date found|Validation failed|An unhandled exception has occurred while executing the request.|Unable to find exact quality|HttpClient error|TaskManager failed while processing|Task Error|Name does not resolve|InvalidDateException|429.TooManyRequests
Why skip these?
- Same reasons as Radarr, plus:
Unable to find exact quality- Quality parsing noise from release namesInvalidDateException- Date parsing errors from indexers
Prowlarr
Path:
/var/log/prowlarr/prowlarr.debug.txt
Regex:
(?i)(\|warn\||\|error\||^\[v[0-9].+\])
Skip:
(?i)Validation failed|An unhandled exception has occurred while executing the request|(?:CinemaZ|PrivateHD)[.a-z0-9/=&?: ]+404\.NotFound|HttpClient error|System.Net.CookieException|TaskManager failed while processing|Task Error|Name does not resolve|NzbDrone.Common.Http.HttpException: HTTP request failed|Retrying in
Why skip these?
(?:CinemaZ|PrivateHD)...404- Known indexers that return 404 for certain searchesSystem.Net.CookieException- Cookie handling issues that don't affect functionalityHTTP request failed/Retrying in- Transient errors with automatic retry
Readarr
Path:
/var/log/readarr/readarr.debug.txt
Regex:
(?i)(\|warn\||\|error\||^\[v[0-9].+\])
Skip:
(?i)Validation failed|An unhandled exception has occurred while executing the request.|HttpClient error
Lidarr
Path:
/var/log/lidarr/lidarr.debug.txt
Regex:
(?i)(\|warn\||\|error\||^\[v[0-9].+\])
Skip:
(?i)Validation failed|An unhandled exception has occurred while executing the request.|HttpClient error
Other Applications
Kometa (formerly Plex Meta Manager)
Path:
/var/log/kometa/meta.log
Regex:
(?i)(\[ERROR\]|\[CRITICAL\])
Why this regex?
- Kometa uses
[ERROR]and[CRITICAL]log level markers - Only matches actual errors, not warnings (which are often informational)
Skip:
(?i)Convert Error:|ID not found|TVDb Error: Name not found|Plex Error: No Items found in Plex|Trakt Error: No TVDb ID found for|TMDb Error: No Movie found for TMDb ID
Why skip these?
Convert Error- Image conversion issues that don't affect functionalityID not found/Name not found- Missing metadata that can't be fixedNo Items found in Plex- Empty collections (expected for new libraries)No TVDb ID found/No Movie found- External service lookup failures
Nginx Error Log
Path:
/var/log/nginx/error.log
Regex:
(?i)(emerg|alert|crit|\[error\].*upstream.*failed|502|503|504|connect\(\) failed|no live upstreams)
Why this regex?
emerg|alert|crit- Nginx severity levels for serious issues\[error\].*upstream.*failed- Backend connection failures502|503|504- Gateway errors indicating backend problemsconnect\(\) failed- Can't reach upstream serversno live upstreams- All backends are down
Skip:
(?i)(client closed connection|upstream timed out.*reading response header|recv\(\) failed|connection reset by peer|SSL_do_handshake)
Why skip these?
client closed connection- User navigated away or closed browserupstream timed out- Often caused by slow backends, not errorsrecv\(\) failed/connection reset- Network glitchesSSL_do_handshake- SSL negotiation failures from bots/scanners
Rustic Backup
Path:
/var/log/rustic/rustic.log
Regex:
(\[ERROR\]|\[WARN\]|starting to backup|successfully saved|backup of.*done)
Why this regex?
\[ERROR\]|\[WARN\]- Actual problems with backupsstarting to backup- Notification that backup startedsuccessfully saved|backup of.*done- Confirmation backup completed
Skip:
(?i)(flush_task.*graceful shutdown|Requesting graceful shutdown|read_end_buffer_size|write_end_buffer_size|repository opendal.*password is correct)
Why skip these?
graceful shutdown- Normal shutdown messagesbuffer_size- Configuration warnings that don't affect functionalitypassword is correct- Informational message, not an error
Pattern Reference
Common *arr Log Patterns
| Pattern | Matches |
|---|---|
\|warn\| |
Warning log level in *arr format: 2024-01-30 12:00:00.000\|Warn\|... |
\|error\| |
Error log level in *arr format |
^\[v[0-9].+\] |
Stack traces that start with any version header (e.g., [v5.0.0.1234]) |
database is locked |
SQLite concurrency issues |
Common Skip Patterns
| Pattern | Reason to Skip |
|---|---|
Invalid date found |
Indexer feed parsing - benign noise |
Validation failed |
User input issues, not system errors |
HttpClient error |
Transient network issues that auto-resolve |
429.TooManyRequests |
Rate limiting - expected behavior |
Name does not resolve |
DNS failures - usually transient |
Download client failed to add torrent |
Usually duplicate detection |
Troubleshooting
File Not Being Watched
- Verify the path exists:
ls -la /path/to/log - Check file permissions - notifiarr user must have read access
- Try enabling Poll for network-mounted files
- Check notifiarr logs:
journalctl -u notifiarr | grep -i watch
Too Many Notifications
- Add patterns to Skip for false positives
- Use more specific Regex patterns
- Consider watching
.debug.txtinstead of.txtfor less verbose logs
No Notifications
- Test your regex at regex101.com with Go flavor
- Verify the watcher is not disabled
- Check that lines actually match with:
tail -f /path/to/log | grep -E 'your-regex' - Review notifiarr debug log for "watch" entries