Çapraz Platform Logging: Cihaz vs. Sunucu Mesajları
# Çapraz Platform Logging: Cihaz vs. Sunucu Mesajları
Mobil uygulamalarda logging stratejisini yanlış yaparsanız, ya hassas veriler sunucuya gider ya da hata ayıklamaya ihtiyaç duyduğunuzda hiç log bulamazsınız. Flutter ve React Native'de bu dengesi kurmak, loglama seviyesi ve hedefi doğru belirlemekle başlar.
Genel kural şudur: Geliştirme sırasında detaylı bilgi cihazda kalır, production'da kritik hatalar ve analitik sunucuya gider. Kişisel veri, token, şifre gibi hassas bilgiler asla sunucuya log olarak gönderilmez.
Dört temel seviye vardır:
- DEBUG: Geliştirme için; cihazda kalır.
- INFO: Uygulama akışı; cihazda tutulabilir.
- WARNING: Uyarılar; sunucuya gönderilebilir.
- ERROR: Hatalar; mutlaka sunucuya gider.
1import 'package:logger/logger.dart';23final logger = Logger();45void logMessage(String message, LogLevel level) {6if (level == LogLevel.debug) {7// Sadece cihazda kalır8logger.d('DEBUG: $message');9} else if (level == LogLevel.error) {10// Sunucuya gönder11logger.e('ERROR: $message');12sendToServer(message);13}14}1516void sendToServer(String message) async {17final response = await http.post(18Uri.parse('https://api.example.com/logs'),19headers: {'Content-Type': 'application/json'},20body: jsonEncode({'message': message, 'timestamp': DateTime.now()}),21);22print('Sunucuya gönderildi: ${response.statusCode}');23}2425enum LogLevel { debug, info, warning, error }Çıktı:
1DEBUG: Kullanıcı girişi başladı (cihazda kalır)2ERROR: Ağ bağlantısı hatası (sunucuya gönderilir)1import { NativeModules } from 'react-native';23const logMessage = (message, level) => {4if (level === 'DEBUG') {5console.log(`[DEBUG] ${message}`);6} else if (level === 'ERROR') {7console.error(`[ERROR] ${message}`);8sendToServer(message);9}10};1112const sendToServer = async (message) => {13try {14const response = await fetch('https://api.example.com/logs', {15method: 'POST',16headers: { 'Content-Type': 'application/json' },17body: JSON.stringify({ message, timestamp: new Date() }),18});19console.log('Sunucuya gönderildi:', response.status);20} catch (error) {21console.error('Gönderme hatası:', error);22}23};1const isDevelopment = __DEV__; // React Native2const isDebugMode = kDebugMode; // Flutter34if (isDevelopment) {5logger.d('Detaylı debug bilgisi');6} else {7// Production: yalnızca ERROR ve WARNING seviyesi sunucuya gider8logger.w('Uyarı mesajı');9logger.e('Hata mesajı');10}Asla şunu sunucuya gönderme: API anahtarları, refresh token'lar, kullanıcı şifreleri, PII (kişisel tanımlayıcı bilgi). Bunlar yalnızca local debug log'unda yer almalı ve production build'inde silinmelidir.
0 yorum