Basics

Journalisation

Introduction

Nylo Website v7 fournit un systeme de journalisation complet.

Les logs ne sont affiches que lorsque APP_DEBUG=true dans votre fichier .env, gardant les applications en production propres.

import 'package:nylo_framework/nylo_framework.dart';

// Basic logging
printInfo("Hello World");
printDebug("Debug message");
printError("Error occurred");

Niveaux de log

Nylo Website v7 prend en charge plusieurs niveaux de log avec une sortie coloree :

Niveau Methode Couleur Cas d'utilisation
Debug printDebug() Cyan Informations de debogage detaillees
Info printInfo() Bleu Informations generales
Error printError() Rouge Erreurs et exceptions
printDebug("Fetching user ID: 123");
printInfo("App initialized");
printError("Network request failed");

Exemple de sortie :

[2025-01-27 10:30:45] [debug] Fetching user ID: 123
[2025-01-27 10:30:45] [info] App initialized
[2025-01-27 10:30:46] [error] Network request failed

Methodes de log

Journalisation de base

// Class methods
printInfo("Information message");
printDebug("Debug message");
printError("Error message");
printJson({"key": "value"});

Erreur avec trace de pile

Journalisez les erreurs avec les traces de pile pour un meilleur debogage :

try {
  await someOperation();
} catch (e, stackTrace) {
  printError(e, stackTrace: stackTrace);
}

Forcer l'affichage independamment du mode debug

Utilisez alwaysPrint: true pour afficher meme lorsque APP_DEBUG=false :

printInfo("Critical info", alwaysPrint: true);
printError("Critical error", alwaysPrint: true);

Afficher le prochain log (remplacement ponctuel)

Afficher un seul log lorsque APP_DEBUG=false :

// .env: APP_DEBUG=false

printInfo("This won't print");

showNextLog();
printInfo("This will print"); // Prints once

printInfo("This won't print again");

Journalisation JSON

Nylo Website v7 inclut une methode de journalisation JSON dediee :

Map<String, dynamic> userData = {
  "id": 123,
  "name": "Anthony",
  "email": "anthony@example.com"
};

// Compact JSON
printJson(userData);
// {"id":123,"name":"Anthony","email":"anthony@example.com"}

// Pretty printed JSON
printJson(userData, prettyPrint: true);
// {
//   "id": 123,
//   "name": "Anthony",
//   "email": "anthony@example.com"
// }

Sortie coloree

Nylo Website v7 utilise les couleurs ANSI pour la sortie des logs en mode debug. Chaque niveau de log a une couleur distincte pour une identification facile.

Desactiver les couleurs

// Disable colored output globally
NyLogger.useColors = false;

Les couleurs sont automatiquement desactivees :

  • En mode release
  • Lorsque le terminal ne prend pas en charge les codes d'echappement ANSI

Ecouteurs de logs

Nylo Website v7 vous permet d'ecouter toutes les entrees de log en temps reel :

// Set up a log listener
NyLogger.onLog = (NyLogEntry entry) {
  print("Log: [${entry.type}] ${entry.message}");

  // Send to crash reporting service
  if (entry.type == 'error') {
    CrashReporter.log(entry.message, stackTrace: entry.stackTrace);
  }
};

Proprietes de NyLogEntry

NyLogger.onLog = (NyLogEntry entry) {
  entry.message;    // The log message
  entry.type;       // Log level (debug, info, warning, error, success, verbose)
  entry.dateTime;   // When the log was created
  entry.stackTrace; // Stack trace (for errors)
};

Cas d'utilisation

  • Envoyer les erreurs aux services de rapport de crash (Sentry, Firebase Crashlytics)
  • Construire des visualiseurs de logs personnalises
  • Stocker les logs pour le debogage
  • Surveiller le comportement de l'application en temps reel
// Example: Send errors to Sentry
NyLogger.onLog = (entry) {
  if (entry.type == 'error') {
    Sentry.captureMessage(
      entry.message,
      level: SentryLevel.error,
    );
  }
};

Extensions d'aide

Nylo Website fournit des methodes d'extension pratiques pour la journalisation :

dump()

Afficher n'importe quelle valeur dans la console :

String project = 'Nylo';
project.dump(); // 'Nylo'

List<String> seasons = ['Spring', 'Summer', 'Fall', 'Winter'];
seasons.dump(); // ['Spring', 'Summer', 'Fall', 'Winter']

int age = 25;
age.dump(); // 25

// Function syntax
dump("Hello World");

dd() - Dump and Die

Afficher une valeur et quitter immediatement (utile pour le debogage) :

String code = 'Dart';
code.dd(); // Prints 'Dart' and stops execution

// Function syntax
dd("Debug point reached");

Configuration

Variables d'environnement

Controlez le comportement de la journalisation dans votre fichier .env :

# Enable/disable all logging
APP_DEBUG=true

DateTime dans les logs

Nylo Website peut inclure des horodatages dans la sortie des logs. Configurez cela dans votre configuration Nylo :

// In your boot provider
Nylo.instance.showDateTimeInLogs(true);

Sortie avec horodatages :

[2025-01-27 10:30:45] [info] User logged in

Sortie sans horodatages :

[info] User logged in

Bonnes pratiques

  1. Utilisez les niveaux de log appropries - Ne journalisez pas tout comme des erreurs
  2. Supprimez les logs verbeux en production - Gardez APP_DEBUG=false en production
  3. Incluez le contexte - Journalisez les donnees pertinentes pour le debogage
  4. Utilisez la journalisation structuree - NyLogger.json() pour les donnees complexes
  5. Configurez la surveillance des erreurs - Utilisez NyLogger.onLog pour capturer les erreurs
// Good logging practice
NyLogger.info("User ${user.id} logged in from ${device.platform}");
NyLogger.error("API request failed", stackTrace: stackTrace, alwaysPrint: true);
NyLogger.json(response.data, prettyPrint: true);