feat: add logging enhancements by integrating pino and pino-pretty for improved error tracking and debugging across the application

This commit is contained in:
Julien Froidefond
2025-10-26 06:15:47 +01:00
parent 7cc72dc13d
commit 52350a43d9
84 changed files with 455 additions and 177 deletions

View File

@@ -3,6 +3,7 @@
import { AlertCircle, RefreshCw } from "lucide-react";
import { useTranslate } from "@/hooks/useTranslate";
import { Button } from "@/components/ui/button";
import logger from "@/lib/logger";
interface ErrorMessageProps {
errorCode: string;
@@ -23,7 +24,7 @@ export const ErrorMessage = ({
const message = t(`errors.${errorCode}`);
if (error) {
console.error(error);
logger.error(error);
}
if (variant === "form") {

View File

@@ -2,6 +2,7 @@
import { useEffect, useState } from "react";
import { Download, X } from "lucide-react";
import logger from "@/lib/logger";
interface BeforeInstallPromptEvent extends Event {
prompt: () => Promise<void>;
@@ -83,7 +84,7 @@ export function InstallPWA() {
setIsInstallable(false);
}
} catch (error) {
console.error("Erreur lors de l'installation:", error);
logger.error({ err: error }, "Erreur lors de l'installation:");
}
setDeferredPrompt(null);

View File

@@ -5,6 +5,7 @@ import { Download, Check, Loader2 } from "lucide-react";
import { Button } from "./button";
import { useToast } from "./use-toast";
import type { KomgaBook } from "@/types/komga";
import logger from "@/lib/logger";
interface BookOfflineButtonProps {
book: KomgaBook;
@@ -81,7 +82,7 @@ export function BookOfflineButton({ book, className }: BookOfflineButtonProps) {
retryCount++;
if (retryCount === maxRetries) {
failedPages++;
console.error(
logger.error(
`Échec du téléchargement de la page ${i} après ${maxRetries} tentatives`
);
}
@@ -97,7 +98,7 @@ export function BookOfflineButton({ book, className }: BookOfflineButtonProps) {
retryCount++;
if (retryCount === maxRetries) {
failedPages++;
console.error(`Erreur lors du téléchargement de la page ${i}:`, error);
logger.error({ err: error }, `Erreur lors du téléchargement de la page ${i}:`);
}
await new Promise((resolve) => setTimeout(resolve, 1000));
}
@@ -143,7 +144,7 @@ export function BookOfflineButton({ book, className }: BookOfflineButtonProps) {
});
}
} catch (error) {
console.error("Erreur lors du téléchargement:", error);
logger.error({ err: error }, "Erreur lors du téléchargement:");
// Ne pas changer le statut si le téléchargement a été volontairement annulé
if ((error as Error)?.message !== "Téléchargement annulé") {
setBookStatus(book.id, { status: "error", progress: 0, timestamp: Date.now() });
@@ -191,7 +192,7 @@ export function BookOfflineButton({ book, className }: BookOfflineButtonProps) {
timestamp: Date.now(),
});
} catch (error) {
console.error("Erreur lors de la vérification du cache:", error);
logger.error({ err: error }, "Erreur lors de la vérification du cache:");
setBookStatus(book.id, { status: "error", progress: 0, timestamp: Date.now() });
}
}, [book.id, book.media.pagesCount, setBookStatus]);
@@ -255,7 +256,7 @@ export function BookOfflineButton({ book, className }: BookOfflineButtonProps) {
await downloadBook();
}
} catch (error) {
console.error("Erreur lors de la gestion du cache:", error);
logger.error({ err: error }, "Erreur lors de la gestion du cache:");
setBookStatus(book.id, { status: "error", progress: 0, timestamp: Date.now() });
toast({
title: "Erreur",

View File

@@ -6,6 +6,7 @@ import { useToast } from "./use-toast";
import { ClientOfflineBookService } from "@/lib/services/client-offlinebook.service";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import logger from "@/lib/logger";
interface MarkAsReadButtonProps {
bookId: string;
@@ -49,7 +50,7 @@ export function MarkAsReadButton({
});
onSuccess?.();
} catch (error) {
console.error("Erreur lors de la mise à jour du progresseur de lecture:", error);
logger.error({ err: error }, "Erreur lors de la mise à jour du progresseur de lecture:");
toast({
title: t("books.actions.markAsRead.error.title"),
description: t("books.actions.markAsRead.error.description"),

View File

@@ -6,6 +6,7 @@ import { useToast } from "./use-toast";
import { ClientOfflineBookService } from "@/lib/services/client-offlinebook.service";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import logger from "@/lib/logger";
interface MarkAsUnreadButtonProps {
bookId: string;
@@ -39,7 +40,7 @@ export function MarkAsUnreadButton({ bookId, onSuccess, className }: MarkAsUnrea
});
onSuccess?.();
} catch (error) {
console.error("Erreur lors de la mise à jour du progresseur de lecture:", error);
logger.error({ err: error }, "Erreur lors de la mise à jour du progresseur de lecture:");
toast({
title: t("books.actions.markAsUnread.error.title"),
description: t("books.actions.markAsUnread.error.description"),