ebilet / common
E-Bilet Common Package - Merkezi loglama ve ortak işlevler için
1.2.3
2025-08-05 21:32 UTC
Requires
- php: ^8.2
- laravel/framework: ^12.0
- monolog/monolog: ^3.0
- php-amqplib/php-amqplib: ^3.0
Requires (Dev)
- phpunit/phpunit: ^11.0
Suggests
- laravel/sanctum: For API authentication features
- predis/predis: For Redis caching and session storage
README
E-Bilet mikroservisleri için merkezi loglama ve ortak işlevler paketi. Laravel 12+ ile uyumlu, config-based architecture ve endpoint-specific logging özellikleri ile.
🚀 Özellikler
- 🔧 Config-Based Architecture: Tüm ayarlar config dosyasından yönetilir
- 🎯 Endpoint-Specific Logging: Belirli endpoint'lerde HTTP loglama
- 📊 Merkezi Loglama Sistemi: RabbitMQ üzerinden log-messages kanalına log gönderimi
- 🌐 HTTP Request/Response Logging: Otomatik HTTP istek/yanıt loglama
- ⚡ Performance Monitoring: Performans metrikleri izleme
- 📈 Business Event Logging: İş olayları loglama
- 🔒 Error Handling: Gelişmiş hata yönetimi
- 🎨 SOLID Principles: Clean code ve yüksek OOP standartları
📦 Kurulum
1. Composer ile Paketi Ekleyin
composer require ebilet/common
2. Service Provider'ı Kaydedin
bootstrap/providers.php
dosyasında (Laravel 12):
return [ // ... Ebilet\Common\ServiceProviders\LoggingServiceProvider::class, ];
3. Configuration Dosyasını Yayınlayın
php artisan vendor:publish --provider="Ebilet\Common\ServiceProviders\LoggingServiceProvider"
4. Environment Variables'ları Ayarlayın
.env
dosyasında:
# RabbitMQ Configuration RABBITMQ_HOST=localhost RABBITMQ_PORT=5672 RABBITMQ_USER=guest RABBITMQ_PASSWORD=guest RABBITMQ_VHOST=/ # HTTP Logging Configuration EBILET_HTTP_LOGGING_ENABLED=true EBILET_HTTP_LOGGING_ENDPOINTS=* EBILET_HTTP_LOGGING_EXCLUDED_PATHS=/health,/metrics # Queue Configuration EBILET_QUEUE_LOG_CHANNEL=log-messages EBILET_QUEUE_METRICS_CHANNEL=metrics EBILET_QUEUE_EVENTS_CHANNEL=events # Performance Monitoring EBILET_PERFORMANCE_MONITORING_ENABLED=true
🎯 Kullanım
1. Basit Loglama
use Ebilet\Common\Facades\Log; // Temel loglama Log::info('Kullanıcı giriş yaptı', ['user_id' => 123]); Log::error('Veritabanı bağlantı hatası', ['error' => $exception->getMessage()]); Log::warning('Yavaş sorgu tespit edildi', ['query' => $sql, 'duration' => 2.5]); // HTTP loglama Log::logHttpRequest('POST', '/api/users', $headers, $body); Log::logHttpResponse(200, $responseHeaders, $responseBody, 0.15); // Performans metrikleri Log::logPerformance('database_query', 0.05, ['table' => 'users']); // İş olayları Log::logBusinessEvent('user_registered', [ 'user_id' => 123, 'email' => 'user@example.com' ]);
2. Endpoint-Specific Middleware Kullanımı
bootstrap/app.php
dosyasında (Laravel 12):
->withMiddleware(function (Middleware $middleware) { $middleware->web(append: [ \Ebilet\Common\Middleware\HttpLoggingMiddleware::class, ]); $middleware->api(append: [ \Ebilet\Common\Middleware\HttpLoggingMiddleware::class, ]); })
3. Config-Based Endpoint Control
.env
dosyasında:
# Tüm endpoint'lerde loglama EBILET_HTTP_LOGGING_ENDPOINTS=* # Sadece belirli endpoint'lerde loglama EBILET_HTTP_LOGGING_ENDPOINTS=GET:/api/users,POST:/api/auth,PUT:/api/profile # Wildcard kullanımı EBILET_HTTP_LOGGING_ENDPOINTS=GET:/api/*,POST:/api/*
4. Queue Manager Kullanımı
use Ebilet\Common\Facades\Queue; // Queue bağlantısı Queue::connect(); // Log gönderimi Queue::sendLog([ 'message' => 'Test log', 'level' => 'info', 'context' => ['test' => true] ], LogMessageType::APPLICATION_INFO); // Metric gönderimi Queue::sendMetric([ 'metric' => 'response_time', 'value' => 0.15, 'unit' => 'seconds' ]); // Event gönderimi Queue::sendEvent([ 'event' => 'user_registered', 'data' => ['user_id' => 123] ]);
5. Enum Kullanımı
use Ebilet\Common\Enums\LogMessageType; // Log mesaj tipi belirleme $messageType = LogMessageType::HTTP_REQUEST; $logLevel = $messageType->getLogLevel(); // 'info' $isCritical = $messageType->isCritical(); // false $isPerformance = $messageType->isPerformance(); // false
⚙️ Konfigürasyon
Config Dosyası: config/ebilet-common.php
return [ /* |-------------------------------------------------------------------------- | RabbitMQ Configuration |-------------------------------------------------------------------------- */ 'rabbitmq' => [ 'host' => env('RABBITMQ_HOST', 'localhost'), 'port' => env('RABBITMQ_PORT', 5672), 'user' => env('RABBITMQ_USER', 'guest'), 'password' => env('RABBITMQ_PASSWORD', 'guest'), 'vhost' => env('RABBITMQ_VHOST', '/'), ], /* |-------------------------------------------------------------------------- | Queue Configuration |-------------------------------------------------------------------------- */ 'queues' => [ 'channels' => [ 'log_messages' => env('EBILET_QUEUE_LOG_CHANNEL', 'log-messages'), 'metrics' => env('EBILET_QUEUE_METRICS_CHANNEL', 'metrics'), 'events' => env('EBILET_QUEUE_EVENTS_CHANNEL', 'events'), ], 'settings' => [ 'log_messages' => [ 'durable' => env('EBILET_QUEUE_LOG_DURABLE', true), 'ttl' => env('EBILET_QUEUE_LOG_TTL', 86400000), // 24 hours 'max_length' => env('EBILET_QUEUE_LOG_MAX_LENGTH', 10000), ], 'metrics' => [ 'durable' => env('EBILET_QUEUE_METRICS_DURABLE', true), 'ttl' => env('EBILET_QUEUE_METRICS_TTL', 604800000), // 7 days 'max_length' => env('EBILET_QUEUE_METRICS_MAX_LENGTH', 50000), ], 'events' => [ 'durable' => env('EBILET_QUEUE_EVENTS_DURABLE', true), 'ttl' => env('EBILET_QUEUE_EVENTS_TTL', 2592000000), // 30 days 'max_length' => env('EBILET_QUEUE_EVENTS_MAX_LENGTH', 100000), ], ], 'delivery_mode' => env('EBILET_QUEUE_DELIVERY_MODE', 2), // Persistent ], /* |-------------------------------------------------------------------------- | HTTP Logging Configuration |-------------------------------------------------------------------------- */ 'http_logging' => [ 'enabled' => env('EBILET_HTTP_LOGGING_ENABLED', true), 'endpoints' => env('EBILET_HTTP_LOGGING_ENDPOINTS', '*'), 'excluded_paths' => env('EBILET_HTTP_LOGGING_EXCLUDED_PATHS', [ '/health', '/metrics', '/favicon.ico', '/robots.txt', '/.well-known' ]), 'excluded_methods' => env('EBILET_HTTP_LOGGING_EXCLUDED_METHODS', ['OPTIONS']), 'sensitive_headers' => env('EBILET_HTTP_LOGGING_SENSITIVE_HEADERS', [ 'authorization', 'cookie', 'x-api-key', 'x-auth-token' ]), 'log_request_body' => env('EBILET_HTTP_LOGGING_REQUEST_BODY', true), 'log_response_body' => env('EBILET_HTTP_LOGGING_RESPONSE_BODY', false), 'max_body_size' => env('EBILET_HTTP_LOGGING_MAX_BODY_SIZE', 1024 * 1024), 'slow_request_threshold' => env('EBILET_HTTP_LOGGING_SLOW_THRESHOLD', 2000), ], ];
📊 Log Message Types
Paket aşağıdaki log mesaj tiplerini destekler:
HTTP Logs
HTTP_REQUEST
: HTTP istekleriHTTP_RESPONSE
: HTTP yanıtlarıHTTP_ERROR
: HTTP hataları
Application Logs
APPLICATION_INFO
: Genel bilgi loglarıAPPLICATION_ERROR
: Uygulama hatalarıAPPLICATION_WARNING
: UyarılarAPPLICATION_DEBUG
: Debug logları
Performance Logs
PERFORMANCE_METRIC
: Performans metrikleriSLOW_REQUEST
: Yavaş isteklerMEMORY_USAGE
: Bellek kullanımı
Business Event Logs
BUSINESS_EVENT
: İş olaylarıUSER_ACTION
: Kullanıcı aksiyonlarıSYSTEM_EVENT
: Sistem olayları
Security Logs
SECURITY_ALERT
: Güvenlik uyarılarıAUTHENTICATION
: Kimlik doğrulamaAUTHORIZATION
: Yetkilendirme
Database Logs
DATABASE_QUERY
: Veritabanı sorgularıDATABASE_ERROR
: Veritabanı hatalarıDATABASE_SLOW_QUERY
: Yavaş sorgular
External Service Logs
EXTERNAL_API_CALL
: Dış API çağrılarıEXTERNAL_API_ERROR
: Dış API hatalarıEXTERNAL_SERVICE_TIMEOUT
: Dış servis timeout'ları
🔧 Error Handling
use Ebilet\Common\Exceptions\LoggingException; try { Log::info('Test message'); } catch (LoggingException $e) { // Logging hatası yönetimi error_log("Logging error: " . $e->getMessage()); }
🧪 Test
# Unit testleri çalıştırma
./vendor/bin/phpunit packages/ebilet/common/tests/
📋 Gereksinimler
- PHP: ^8.2
- Laravel: ^12.0
- RabbitMQ: 3.8+
- php-amqplib: ^3.0
- monolog: ^3.0
🤝 Katkıda Bulunma
- Fork yapın
- Feature branch oluşturun (
git checkout -b feature/amazing-feature
) - Commit yapın (
git commit -m 'Add amazing feature'
) - Push yapın (
git push origin feature/amazing-feature
) - Pull Request oluşturun
📄 Lisans
Bu paket MIT lisansı altında lisanslanmıştır.
🔄 Versiyon Geçmişi
v1.2.3 (Current)
- ServiceClient Class Name Fix:
BaseServiceClient.php
→ServiceClient.php
dosya adı düzeltmesi - Autoload Issues: Composer autoload sorunları çözüldü
- Class Not Found Error: ServiceClient sınıfı bulunamama hatası düzeltildi
v1.2.2
- Service Communication System: Tamamen yeni servisler arası iletişim sistemi
- SOLID Architecture: Interface, Factory, Manager pattern'leri ile temiz mimari
- User & Order Facades: Basit facade kullanımı (
User::get()
,Order::post()
) - Configuration Driven: Config'den service URL'leri okuma
- Error Handling: Kapsamlı error handling ve logging
- Health Check: Service sağlık kontrolü
- Method Chaining:
withToken()
,withHeaders()
,timeout()
chaining
v1.2.1
- ConfigManager ve Config Facade
- Geliştirilmiş config yapısı
- Kapsamlı dokümantasyon
- Güvenlik ayarları
v1.2.0
- Centralized Logger
- Queue Manager
- HTTP Logging Middleware
v1.1.0
- Laravel 12 uyumluluğu
- Config-based architecture
- Endpoint-specific logging
- Improved requirements
v1.0.0
- İlk stable sürüm
- Temel loglama özellikleri
- RabbitMQ entegrasyonu