awesome_logger 0.0.1
awesome_logger: ^0.0.1 copied to clipboard
A powerful and beautiful logging package for Flutter with emojis, colors, and easy context access
🎨 Awesome Logger #
Un package de logging élégant et puissant pour Flutter avec des emojis, des catégories, et un accès facile via le BuildContext.
✨ Fonctionnalités #
- 🎯 Emojis contextuels pour chaque type de log
- 📱 Accès via context pour un logging simplifié
- ⏱️ Timers intégrés pour mesurer les performances
- 🎨 Catégories spécialisées (Network, Database, Auth, etc.)
- 📊 Formatage structuré (tables, JSON, sections)
- 🚫 N'utilise PAS
print()maisdeveloper.log() - ⚙️ Configuration flexible (dev, prod, custom)
- 🎭 Niveaux de log (success, info, warning, error, etc.)
- 📈 Statistiques de timers pour l'analyse de performance
📦 Installation #
Ajoutez ce package à votre pubspec.yaml:
dependencies:
awesome_logger: ^1.0.0
🚀 Utilisation rapide #
Configuration initiale #
import 'package:awesome_logger/awesome_logger.dart';
void main() {
// Configuration pour le développement
AwesomeLogger.configure(AwesomeLoggerConfig.development());
// Ou configuration personnalisée
AwesomeLogger.configure(AwesomeLoggerConfig(
enabled: true,
showTimestamp: true,
logHttpBodies: true,
maxBodyLength: 500,
));
runApp(MyApp());
}
Utilisation avec le Context (Recommandé ✅) #
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Logger accessible via context.log
context.log.info('Widget construit');
context.log.success('Opération réussie');
context.log.error('Une erreur est survenue');
return Container();
}
}
Utilisation statique #
// Logs de base
AwesomeLogger.success('Utilisateur connecté');
AwesomeLogger.info('Chargement des données');
AwesomeLogger.warning('Cache expiré');
AwesomeLogger.error('Échec de connexion', error: e, stackTrace: stack);
// Logs par catégorie
AwesomeLogger.network('GET /api/users');
AwesomeLogger.database('Query executed: SELECT * FROM users');
AwesomeLogger.auth('Token refreshed');
AwesomeLogger.firebase('Event logged: user_login');
AwesomeLogger.payment('Payment processed: \$99.99');
📚 Exemples détaillés #
1. Logs basiques #
// Niveaux de log
context.log.verbose('Détails techniques');
context.log.debug('Information de débogage');
context.log.info('Information générale');
context.log.warning('Attention requise');
context.log.error('Erreur critique');
context.log.success('Opération réussie');
2. Logs par catégorie #
// Network
context.log.network('API call started');
context.log.httpStatus(200, '/api/users', method: 'GET');
context.log.httpBody(jsonEncode(responseData), type: 'RESPONSE');
// Database
context.log.database('User saved to local DB');
// Authentication
context.log.auth('User logged in with email');
// Navigation
context.log.navigation('Navigated to ProfileScreen');
// UI
context.log.ui('Button rendered with animation');
// Analytics
context.log.analytics('Event tracked: button_clicked');
// Security
context.log.security('JWT token validated');
3. Timers et Performance #
// Timer simple
context.log.startTimer('data_load');
await loadData();
context.log.stopTimer('data_load'); // Affiche: Timer data_load: 1234ms
// Avec measure (recommandé)
await context.log.measure('api_call', () async {
final result = await fetchFromApi();
return result;
});
// Statistiques des timers
final stats = AwesomeLogger.getTimerStats('api_call');
// { count: 5, average: '234.5ms', min: '120ms', max: '450ms' }
4. Logging structuré #
// Table
AwesomeLogger.table({
'User ID': '12345',
'Name': 'John Doe',
'Email': '[email protected]',
'Status': 'Active',
}, title: 'User Information');
// JSON
AwesomeLogger.json({
'users': [1, 2, 3],
'total': 100,
}, description: 'API Response');
// Section
AwesomeLogger.section('USER AUTHENTICATION');
AwesomeLogger.info('Checking credentials...');
AwesomeLogger.success('Authentication successful');
AwesomeLogger.separator();
5. Tracking des actions utilisateur #
context.log.userAction('button_pressed', context: {
'button_id': 'submit_form',
'screen': 'ProfileScreen',
});
context.log.stateChange('loading', 'loaded');
context.log.lifecycle('initState');
6. Gestion des erreurs #
try {
await riskyOperation();
} catch (e, stack) {
context.log.error(
'Operation failed',
error: e,
stackTrace: stack,
);
}
⚙️ Configuration #
Modes prédéfinis #
// Développement (tous les logs)
AwesomeLogger.configure(AwesomeLoggerConfig.development());
// Production (logs minimaux)
AwesomeLogger.configure(AwesomeLoggerConfig.production());
Configuration personnalisée #
AwesomeLogger.configure(AwesomeLoggerConfig(
enabled: true, // Activer/désactiver les logs
forceEnable: false, // Forcer même en release
showTimestamp: true, // Afficher les timestamps
showStackTrace: true, // Afficher les stack traces
logHttpBodies: true, // Logger les corps HTTP
logMethodCalls: false, // Logger entrée/sortie méthodes
maxBodyLength: 1000, // Longueur max des corps HTTP
disabledCategories: {'DEBUG'}, // Catégories désactivées
minLevel: 0, // Niveau minimum (0-1000)
));
Désactiver des catégories spécifiques #
AwesomeLogger.configure(
AwesomeLoggerConfig.withDisabledCategories({
'VERBOSE',
'DEBUG',
'UI',
}),
);
🎨 Liste complète des emojis #
| Catégorie | Emoji | Méthode |
|---|---|---|
| Success | ✅ | success() |
| Error | ❌ | error() |
| Warning | ⚠️ | warning() |
| Info | ℹ️ | info() |
| Debug | 🔍 | debug() |
| Verbose | 📝 | verbose() |
| Network | 🌐 | network() |
| Database | 💾 | database() |
| Auth | 🔑 | auth() |
| Navigation | 🧭 | navigation() |
| UI | 🎨 | ui() |
| Payment | 💳 | payment() |
| Chat | 💬 | chat() |
| Firebase | 🔥 | firebase() |
| API | 🚀 | api() |
| File | 📁 | file() |
| Notification | 🔔 | notification() |
| Performance | ⏱️ | performance() |
| Analytics | 📊 | analytics() |
| Security | 🛡️ | security() |
🎯 Bonnes pratiques #
- Configuration au démarrage - Configurez le logger dans
main() - Utilisez context.log - Plus pratique et contextuel
- Catégories appropriées - Utilisez la bonne catégorie pour chaque log
- Timers pour la performance - Mesurez les opérations critiques
- Erreurs avec stack traces - Toujours inclure le stack trace
- Production mode - Désactivez les logs verbeux en production
📝 Exemple complet #
class UserService {
Future<User> loginUser(String email, String password) async {
AwesomeLogger.section('USER LOGIN');
AwesomeLogger.auth('Attempting login for: $email');
AwesomeLogger.startTimer('login_process');
try {
// API Call
AwesomeLogger.network('POST /api/auth/login');
final response = await api.login(email, password);
AwesomeLogger.httpStatus(response.statusCode, '/api/auth/login', method: 'POST');
if (response.statusCode == 200) {
final user = User.fromJson(response.data);
// Save to database
AwesomeLogger.database('Saving user to local DB');
await db.saveUser(user);
// Track analytics
AwesomeLogger.analytics('Event: user_login_success');
AwesomeLogger.success('User logged in successfully');
AwesomeLogger.stopTimer('login_process');
return user;
} else {
throw Exception('Login failed');
}
} catch (e, stack) {
AwesomeLogger.error('Login failed', error: e, stackTrace: stack);
AwesomeLogger.stopTimer('login_process');
rethrow;
}
}
}
🤝 Contribution #
Les contributions sont les bienvenues ! N'hésitez pas à ouvrir une issue ou une pull request.
📄 Licence #
MIT License - voir le fichier LICENSE pour plus de détails.
👨💻 Auteur #
Créé avec ❤️ pour la communauté Flutter
Note: Ce package utilise dart:developer au lieu de print() pour une meilleure intégration avec les outils de développement Flutter et des performances optimales.