Tune Home Assistant logging by keeping a stable warning-level baseline and enabling debug output only for the smallest component and shortest window that can reproduce the fault.
Permanent global debug can bury the first useful exception, increase write activity, and rotate away earlier context, while an overly quiet setup leaves only a generic unavailable state. Measure the current rate, identify the logger named around the first failure, capture one controlled reproduction, and return to baseline after the evidence is saved and redacted.
Establish a Baseline Before Raising Verbosity
Record the default level, log destination, rotation behavior, file growth over a normal hour, and the timestamp of one known event. Save the current logger configuration so every temporary change has a precise rollback target.
Separate recurring warnings that identify a real fault from harmless repetition that merely consumes space. The baseline passes when normal startup, one routine automation, and one integration refresh leave enough history to see the first error and its surrounding context.
If the log already grows rapidly at the baseline, identify the top repeating namespace and message before enabling more output. Raising global verbosity at this stage usually reduces diagnostic value by accelerating rotation.
Preserve one baseline excerpt that includes startup, an ordinary automation, and the quiet period afterward. It becomes the comparison that shows whether temporary debug added useful evidence or only more volume.
Raise Only the Logger That Owns the Failure
Use the integration or library namespace shown in the earliest relevant message, then enable debug for that namespace alone. Set a start time, stop time, original trigger, and maximum acceptable growth before the test begins.
Changing one integration’s log level at runtime keeps collection scoped to the component that can explain the failure rather than every subsystem.
If the selected logger produces no additional evidence, verify its exact namespace and whether the underlying library uses another logger. Add one related namespace at a time; revert the previous addition when it does not contribute.
Capture One Controlled Reproduction
Clear only the live view or mark the current timestamp, perform the exact failing action once, and record the entity, integration, client, and correlation time. Preserve several messages before the first exception and the complete exception chain after it.
A targeted debug capture works only when logger selection follows the component producing the needed detail. Treat the example as a technique, not a permanent configuration recommendation.
If the fault does not reproduce, stop the debug window and return to baseline rather than waiting indefinitely. Schedule another bounded window around the known trigger, such as startup, backup, reconnect, or an automation run.
Redact, Revert, and Confirm Coverage
Disable temporary debug, restore the saved baseline, and confirm file growth and write activity return to their prior range. Review the export for tokens, URLs with credentials, location data, personal identifiers, webhook paths, and device names before sharing.
When evidence could be client-specific, apply the client-versus-server comparison before expanding server logging.
The tuning passes when the original failure produces a useful timestamped trace, the shared copy is redacted, and normal logging still retains actionable warnings after two restarts. Escalate when the named component fails without emitting any diagnostic event under a verified logger namespace.
Support & Tips
More to Read

How to Optimize Immich Database Connections for Concurrent Containers
Do not raise max_connections first. Measure Immich sessions, total every container's demand, preserve admin headroom, and tune only the proven bottleneck.

How to Prevent Duplicate Jobs or Imports in Immich
Separate repeated jobs from duplicate assets. Use one canonical ingestion path, control retries and path changes, then test re-entry on a small cohort.

How to Repair Immich After Its Database Volume Fills Up
Never delete PostgreSQL WAL to free space. Stop Immich writes, preserve database state, add safe capacity, recover PostgreSQL, then prevent recurrence.

