Ç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.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

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';
2
3final logger = Logger();
4
5void logMessage(String message, LogLevel level) {
6if (level == LogLevel.debug) {
7// Sadece cihazda kalır
8logger.d('DEBUG: $message');
9} else if (level == LogLevel.error) {
10// Sunucuya gönder
11logger.e('ERROR: $message');
12sendToServer(message);
13}
14}
15
16void 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}
24
25enum 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';
2
3const logMessage = (message, level) => {
4if (level === 'DEBUG') {
5console.log(`[DEBUG] ${message}`);
6} else if (level === 'ERROR') {
7console.error(`[ERROR] ${message}`);
8sendToServer(message);
9}
10};
11
12const 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 Native
2const isDebugMode = kDebugMode; // Flutter
3
4if (isDevelopment) {
5logger.d('Detaylı debug bilgisi');
6} else {
7// Production: yalnızca ERROR ve WARNING seviyesi sunucuya gider
8logger.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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz