refactor(logging): route frontend console calls through the logger

TRACES: | DR-204

484 ungated `console.*` calls across 63 non-test frontend files shipped to
end users with no way to turn them off. Mechanical substitution, no control
flow, error handling or message semantics changed:

  console.log / console.debug -> log.debug
  console.info                -> log.info
  console.warn                -> log.warn
  console.error               -> log.error

Hand-written `"[Scope] …"` prefixes are dropped where the logger's scope
now carries them; scope names that already existed are preserved verbatim
(`[Auth]`, `[VideoPlayer]`, `[PiP]`, …) and inferred from the filename
where a file had none. `src/routes/player/[id]/+page.svelte` keeps its
`NextEpisode` and `AutoPlay` sub-scopes as separate loggers rather than
flattening them into the page scope.

`grep -rn 'console\.' src/` now matches nothing outside the tests and the
facade itself.
This commit is contained in:
2026-08-20 19:29:59 +02:00
parent 4c82a0a025
commit d54d8cc7c4
63 changed files with 686 additions and 490 deletions
@@ -10,6 +10,9 @@
import FavoriteButton from "$lib/components/FavoriteButton.svelte";
import { favoriteOverrides } from "$lib/stores/favorites";
import { formatDuration } from "$lib/utils/duration";
import { createLogger } from "$lib/utils/logger";
const log = createLogger("PlaylistDetail");
interface Props {
playlist: MediaItem;
@@ -40,7 +43,7 @@
const repo = auth.getRepository();
entries = await repo.getPlaylistItems(playlist.id);
} catch (e) {
console.error("[PlaylistDetail] Failed to load items:", e);
log.error("Failed to load items:", e);
toast.error("Failed to load playlist items");
} finally {
loading = false;
@@ -62,7 +65,7 @@
},
});
} catch (e) {
console.error("[PlaylistDetail] Failed to play all:", e);
log.error("Failed to play all:", e);
toast.error("Failed to play playlist");
}
}
@@ -82,7 +85,7 @@
},
});
} catch (e) {
console.error("[PlaylistDetail] Failed to shuffle play:", e);
log.error("Failed to shuffle play:", e);
toast.error("Failed to shuffle playlist");
}
}
@@ -100,7 +103,7 @@
playlist.name = trimmed;
toast.success("Playlist renamed");
} catch (e) {
console.error("[PlaylistDetail] Failed to rename:", e);
log.error("Failed to rename:", e);
toast.error("Failed to rename playlist");
editName = playlist.name;
} finally {
@@ -115,7 +118,7 @@
toast.success("Playlist deleted");
goto("/library");
} catch (e) {
console.error("[PlaylistDetail] Failed to delete:", e);
log.error("Failed to delete:", e);
toast.error("Failed to delete playlist");
} finally {
showDeleteConfirm = false;
@@ -129,7 +132,7 @@
entries = entries.filter(e => e.playlistItemId !== entry.playlistItemId);
toast.success("Track removed");
} catch (e) {
console.error("[PlaylistDetail] Failed to remove track:", e);
log.error("Failed to remove track:", e);
toast.error("Failed to remove track");
}
}