Files
citrus-cms/resources/views/guide/isNowAuth-logging-guide.md
T
2026-04-28 21:15:09 +03:00

652 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# isNowAuth Logging System Guide / isNowAuth Loglama Sistemi Kılavuzu
## What This Logging System Does / Bu Loglama Sistemi Ne Yapar
### English
**Purpose and Importance:**
This logging system provides complete transparency into the authorization decision-making process for weld log updates. Every step of the validation process is recorded, allowing developers and administrators to:
- **Understand Why Updates Are Blocked or Allowed**: When a user tries to update a weld log and the system blocks it, logs show exactly which rule prevented the update
- **Track User Actions**: See who attempted to update what data, when, and what the outcome was
- **Debug Authorization Issues**: Quickly identify if a problem is related to welder field restrictions, time limits, or user permission levels
- **Audit Trail**: Maintain a complete history of all authorization checks for compliance and security purposes
- **Performance Monitoring**: Identify if authorization checks are taking too long or causing bottlenecks
**What Gets Logged:**
- Every authorization check attempt with request details
- Current database values vs. requested new values
- Field-by-field analysis of what's being updated
- User information (ID, level, permissions)
- Time calculations and limit comparisons
- The final decision (allow/deny) with clear reasoning
- Special cases like real_welder updates and level-based exceptions
**Who Should Use These Logs:**
- **Developers**: For debugging authorization logic and understanding system behavior
- **System Administrators**: For troubleshooting user complaints about blocked updates
- **QA Engineers**: For verifying that authorization rules work as expected
- **Compliance Officers**: For auditing data modification attempts
- **Support Teams**: For explaining to users why their update was rejected
**When to Check These Logs:**
- When users report they cannot update weld logs
- When investigating suspicious or unauthorized update attempts
- When testing new authorization rules or modifications
- When debugging time limit issues
- When validating that welder field protections are working correctly
---
### Türkçe
**Amaç ve Önemi:**
Bu loglama sistemi, kaynak kaydı güncellemeleri için yetkilendirme karar verme sürecinde tam şeffaflık sağlar. Doğrulama sürecinin her adımı kaydedilir ve geliştiriciler ile yöneticilerin şunları yapmasına olanak tanır:
- **Güncellemelerin Neden Engellendiğini veya İzin Verildiğini Anlamak**: Bir kullanıcı kaynak kaydını güncellemeye çalıştığında ve sistem engellediğinde, loglar hangi kuralın güncellemeyi engellediğini tam olarak gösterir
- **Kullanıcı Eylemlerini Takip Etmek**: Kimin, hangi veriyi, ne zaman güncellemeye çalıştığını ve sonucun ne olduğunu görmek
- **Yetkilendirme Sorunlarını Gidermek**: Bir sorunun kaynakçı alanı kısıtlamaları, zaman limitleri veya kullanıcı yetki seviyeleriyle ilgili olup olmadığını hızlıca belirlemek
- **Denetim İzi**: Uyumluluk ve güvenlik amaçları için tüm yetkilendirme kontrollerinin tam geçmişini tutmak
- **Performans İzleme**: Yetkilendirme kontrollerinin çok uzun sürdüğünü veya darboğazlara neden olduğunu tespit etmek
**Neler Loglanır:**
- Her yetkilendirme kontrol denemesi ile istek detayları
- Mevcut veritabanı değerleri ile istenen yeni değerlerin karşılaştırması
- Neyin güncellendiğinin alan bazında analizi
- Kullanıcı bilgileri (ID, seviye, yetkiler)
- Zaman hesaplamaları ve limit karşılaştırmaları
- Net gerekçesiyle birlikte final karar (izin ver/engelle)
- real_welder güncellemeleri ve seviye bazlı istisnalar gibi özel durumlar
**Bu Logları Kimler Kullanmalı:**
- **Geliştiriciler**: Yetkilendirme mantığını debug etmek ve sistem davranışını anlamak için
- **Sistem Yöneticileri**: Engellenen güncellemeler hakkında kullanıcı şikayetlerini gidermek için
- **QA Mühendisleri**: Yetkilendirme kurallarının beklendiği gibi çalıştığını doğrulamak için
- **Uyumluluk Görevlileri**: Veri değiştirme denemelerini denetlemek için
- **Destek Ekipleri**: Kullanıcılara neden güncellemelerinin reddedildiğini açıklamak için
**Bu Loglar Ne Zaman Kontrol Edilmeli:**
- Kullanıcılar kaynak kayıtlarını güncelleyemediklerini bildirdiğinde
- Şüpheli veya yetkisiz güncelleme denemelerini araştırırken
- Yeni yetkilendirme kurallarını veya değişiklikleri test ederken
- Zaman limiti sorunlarını debug ederken
- Kaynakçı alanı korumalarının doğru çalıştığını doğrularken
---
## English Version
### Overview
The `isNowAuth` function in `AdminController.php` is responsible for authorization checks when updating weld log records. This guide explains the comprehensive logging system implemented for debugging and monitoring purposes.
### Log Key Structure
All logs follow a standardized key format:
```
{function_name}.{section}.{detail}
```
This hierarchical structure makes it easy to filter and trace specific operations.
### Main Functions and Their Logs
#### 1. isNowAuth Function
The primary authorization function that checks various conditions before allowing weld log updates.
##### Log Keys:
**`isNowAuth.start`**
- **Purpose**: Log the initial request parameters
- **Data Logged**:
- `table_name`: The target table name
- `request_key`: The primary key of the record being updated
- `request_values`: The new values to be updated
- **When**: At the very beginning of the function
- **Example**:
```json
{
"table_name": "weld_logs",
"request_key": {"id": 123},
"request_values": {"welder_1": "JOHN", "welder_2": "MIKE"}
}
```
**`isNowAuth.query.result`**
- **Purpose**: Log the database query result
- **Data Logged**:
- `query_found`: Boolean indicating if record was found
- `query_id`: The ID of the found record
- **When**: After querying the database for the existing record
**`isNowAuth.welder_check.existing_values`**
- **Purpose**: Log current welder field values from database
- **Data Logged**:
- `welder_1`: Current welder_1 value
- `welder_2`: Current welder_2 value
- `welder_1_empty`: Boolean check if welder_1 is empty
- `welder_2_empty`: Boolean check if welder_2 is empty
- **When**: When checking welder fields in existing record
**`isNowAuth.welder_check.new_values`**
- **Purpose**: Log the new welder values from the update request
- **Data Logged**:
- `welder_1_isset`: Boolean check if welder_1 is in update
- `welder_2_isset`: Boolean check if welder_2 is in update
- `welder_1`: New welder_1 value (if any)
- `welder_2`: New welder_2 value (if any)
- **When**: When processing new values from the request
**`isNowAuth.welder_check.blocked`**
- **Purpose**: Log when a welder field update is blocked
- **Data Logged**:
- `reason`: Why it was blocked (e.g., "welder_1_already_filled")
- `existing_value`: The current value in database
- `new_value`: The attempted new value
- **When**: When trying to update a welder field that's already filled
- **Action**: Returns false (blocks the update)
**`isNowAuth.real_welder_check.status`**
- **Purpose**: Log whether only real_welder fields are being updated
- **Data Logged**:
- `is_only_real_welder_update`: Boolean result
- **When**: After checking if the update is only for real_welder_1 or real_welder_2
**`isNowAuth.real_welder_check.welder_status`**
- **Purpose**: Log welder field status for real_welder updates
- **Data Logged**:
- `welder_1_value`: Current welder_1 value
- `welder_2_value`: Current welder_2 value
- `welder_fields_filled`: Boolean if any welder field is filled
- **When**: During real_welder update validation
**`isNowAuth.real_welder_check.decision`**
- **Purpose**: Log the decision for real_welder updates
- **Data Logged**:
- `action`: "allow_without_time_limit" or "continue_to_time_check"
- `reason`: "welder_fields_empty" or "welder_fields_filled"
- **When**: After deciding whether to bypass time limit for real_welder updates
**`isNowAuth.level_check.status`**
- **Purpose**: Log user level check status
- **Data Logged**:
- `user_id`: Current user's ID
- `user_level`: Current user's level
- `allowed_levels`: Array of levels that bypass time limit
- `level_in_allowed`: Boolean if user is in exception list
- **When**: Checking if user level has special privileges
**`isNowAuth.level_check.decision`**
- **Purpose**: Log decision based on user level
- **Data Logged**:
- `action`: "allow"
- `reason`: "user_level_in_exception_list"
- `user_level`: The user's level
- **When**: When user level grants exception from time limit
- **Action**: Returns true (allows the update)
**`isNowAuth.time_limit_check.initiating`**
- **Purpose**: Log when time limit check is about to be performed
- **Data Logged**:
- `user_level`: User's level
- `welding_date`: The welding date from record
- `created_at`: Record creation timestamp
- **When**: Before calling checkWeldLogTimeLimit function
**`isNowAuth.decision`**
- **Purpose**: Log final authorization decisions
- **Data Logged**:
- `action`: "allow" or "deny"
- `reason`: Description of why decision was made
- **When**: Various exit points of the function
- **Possible Reasons**:
- "welding_date_empty": No welding date, update allowed
- "not_weld_logs_table": Different table, no special rules
#### 2. isOnlyRealWelderFieldsUpdate Function
Helper function to determine if only real_welder fields are being updated.
##### Log Keys:
**`isOnlyRealWelderFieldsUpdate.analysis`**
- **Purpose**: Log detailed analysis of fields being updated
- **Data Logged**:
- `updating_fields`: Array of all fields being updated
- `has_real_welder_update`: Boolean if any real_welder field is included
- `other_fields`: Array of non-real_welder fields being updated
- `is_only_real_welder_update`: Boolean final result
- `real_welder_field_values`: Object with real_welder_1 and real_welder_2 values
- **When**: Every time this function is called
- **Example**:
```json
{
"updating_fields": ["real_welder_1", "real_welder_2"],
"has_real_welder_update": true,
"other_fields": [],
"is_only_real_welder_update": true,
"real_welder_field_values": {
"real_welder_1": "JOHN",
"real_welder_2": "MIKE"
}
}
```
#### 3. checkWeldLogTimeLimit Function
Validates if the update is within the allowed time limit.
##### Log Keys:
**`checkWeldLogTimeLimit.start`**
- **Purpose**: Log function initialization
- **Data Logged**:
- `query_id`: Record ID being checked
- `created_at`: Record creation timestamp
- `created_at_is_null`: Boolean check
- **When**: At function start
**`checkWeldLogTimeLimit.calculation`**
- **Purpose**: Log time difference calculations
- **Data Logged**:
- `created_at`: Record creation time
- `current_time`: Current timestamp
- `allowed_hour_limit`: Maximum hours allowed from settings
- `actual_hour_difference`: Calculated hour difference
- `within_limit`: Boolean if within allowed time
- **When**: After calculating time differences
- **Example**:
```json
{
"created_at": "2024-10-16 08:00:00",
"current_time": "2024-10-16 10:30:00",
"allowed_hour_limit": 4,
"actual_hour_difference": 2.5,
"within_limit": true
}
```
**`checkWeldLogTimeLimit.decision`**
- **Purpose**: Log the final time limit decision
- **Data Logged**:
- `action`: "allow" or "deny"
- `reason`: Explanation of decision
- `hour_difference`: Actual hours passed (for allow)
- `allowed_limit`: Maximum allowed hours (for allow)
- `exceeded_by`: Hours over the limit (for deny only)
- **When**: Before returning the decision
- **Possible Reasons**:
- "within_time_limit": Update allowed
- "exceeded_time_limit": Update blocked
- "created_at_is_null": No creation date, blocked
### How to Use These Logs for Debugging
#### 1. Monitor All isNowAuth Operations
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth"
```
#### 2. Track Specific Authorization Failures
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.welder_check.blocked"
```
#### 3. Monitor Time Limit Violations
```bash
tail -f storage/logs/laravel.log | grep "checkWeldLogTimeLimit.decision" | grep "deny"
```
#### 4. Track Real Welder Updates
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.real_welder_check"
```
#### 5. Monitor User Level Exceptions
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.level_check"
```
### Common Debugging Scenarios
#### Scenario 1: Update is Blocked - Find Out Why
1. Search for the record ID in logs:
```bash
grep "query_id.*123" storage/logs/laravel.log | grep isNowAuth
```
2. Look for decision logs:
```bash
grep "isNowAuth.decision\|isNowAuth.welder_check.blocked" storage/logs/laravel.log
```
#### Scenario 2: Time Limit Issues
1. Check time calculations:
```bash
grep "checkWeldLogTimeLimit.calculation" storage/logs/laravel.log | tail -1
```
2. Review the decision:
```bash
grep "checkWeldLogTimeLimit.decision" storage/logs/laravel.log | tail -1
```
#### Scenario 3: Real Welder Update Problems
1. Check if it's recognized as real_welder only update:
```bash
grep "isOnlyRealWelderFieldsUpdate.analysis" storage/logs/laravel.log | tail -1
```
2. Check the welder field status:
```bash
grep "isNowAuth.real_welder_check.welder_status" storage/logs/laravel.log | tail -1
```
### Log Levels
All logs use `Log::debug()` which means:
- They appear in the log file only when `APP_DEBUG=true` in `.env`
- They don't appear in production by default (for performance)
- They use the "DEBUG" level in log entries
### Best Practices
1. **Always check logs in sequence**: Follow the flow from `isNowAuth.start` to final decision
2. **Use grep with context**: Add `-A 5 -B 5` to see surrounding logs
3. **Filter by timestamp**: When debugging specific issues, filter by time range
4. **Save important log sections**: Export relevant logs for documentation
5. **Monitor production carefully**: Only enable debug logs temporarily in production
### Performance Considerations
- Debug logs are only written when `APP_DEBUG=true`
- Each authorization check generates 5-15 log entries
- Log file rotation should be configured properly
- Consider using log analysis tools for high-volume systems
---
## Türkçe Versiyon
### Genel Bakış
`AdminController.php` dosyasındaki `isNowAuth` fonksiyonu, kaynak kaydı güncellenirken yetkilendirme kontrollerinden sorumludur. Bu kılavuz, hata ayıklama ve izleme amaçlı olarak uygulanan kapsamlı loglama sistemini açıklar.
### Log Anahtar Yapısı
Tüm loglar standart bir anahtar formatı takip eder:
```
{fonksiyon_adi}.{bolum}.{detay}
```
Bu hiyerarşik yapı, belirli işlemleri filtrelemeyi ve izlemeyi kolaylaştırır.
### Ana Fonksiyonlar ve Logları
#### 1. isNowAuth Fonksiyonu
Kaynak kaydı güncellemelerine izin vermeden önce çeşitli koşulları kontrol eden birincil yetkilendirme fonksiyonu.
##### Log Anahtarları:
**`isNowAuth.start`**
- **Amaç**: Başlangıç istek parametrelerini logla
- **Loglanan Veriler**:
- `table_name`: Hedef tablo adı
- `request_key`: Güncellenen kaydın birincil anahtarı
- `request_values`: Güncellenecek yeni değerler
- **Ne Zaman**: Fonksiyonun en başında
- **Örnek**:
```json
{
"table_name": "weld_logs",
"request_key": {"id": 123},
"request_values": {"welder_1": "JOHN", "welder_2": "MIKE"}
}
```
**`isNowAuth.query.result`**
- **Amaç**: Veritabanı sorgu sonucunu logla
- **Loglanan Veriler**:
- `query_found`: Kayıt bulunup bulunmadığını gösteren boolean
- `query_id`: Bulunan kaydın ID'si
- **Ne Zaman**: Mevcut kayıt için veritabanı sorgulandıktan sonra
**`isNowAuth.welder_check.existing_values`**
- **Amaç**: Veritabanındaki mevcut kaynakçı alan değerlerini logla
- **Loglanan Veriler**:
- `welder_1`: Mevcut welder_1 değeri
- `welder_2`: Mevcut welder_2 değeri
- `welder_1_empty`: welder_1'in boş olup olmadığını gösteren boolean
- `welder_2_empty`: welder_2'nin boş olup olmadığını gösteren boolean
- **Ne Zaman**: Mevcut kayıttaki kaynakçı alanları kontrol edilirken
**`isNowAuth.welder_check.new_values`**
- **Amaç**: Güncelleme isteğindeki yeni kaynakçı değerlerini logla
- **Loglanan Veriler**:
- `welder_1_isset`: welder_1'in güncellemede olup olmadığını gösteren boolean
- `welder_2_isset`: welder_2'nin güncellemede olup olmadığını gösteren boolean
- `welder_1`: Yeni welder_1 değeri (varsa)
- `welder_2`: Yeni welder_2 değeri (varsa)
- **Ne Zaman**: İstekten yeni değerler işlenirken
**`isNowAuth.welder_check.blocked`**
- **Amaç**: Kaynakçı alanı güncellemesi engellendiğinde logla
- **Loglanan Veriler**:
- `reason`: Neden engellendiği (örn: "welder_1_already_filled")
- `existing_value`: Veritabanındaki mevcut değer
- `new_value`: Denenen yeni değer
- **Ne Zaman**: Zaten dolu olan bir kaynakçı alanı güncellenmeye çalışıldığında
- **Aksiyon**: false döner (güncellemeyi engeller)
**`isNowAuth.real_welder_check.status`**
- **Amaç**: Sadece real_welder alanlarının güncellenip güncellenmediğini logla
- **Loglanan Veriler**:
- `is_only_real_welder_update`: Boolean sonuç
- **Ne Zaman**: Güncellemenin sadece real_welder_1 veya real_welder_2 için olup olmadığı kontrol edildikten sonra
**`isNowAuth.real_welder_check.welder_status`**
- **Amaç**: real_welder güncellemeleri için kaynakçı alan durumunu logla
- **Loglanan Veriler**:
- `welder_1_value`: Mevcut welder_1 değeri
- `welder_2_value`: Mevcut welder_2 değeri
- `welder_fields_filled`: Herhangi bir kaynakçı alanının dolu olup olmadığını gösteren boolean
- **Ne Zaman**: real_welder güncelleme doğrulaması sırasında
**`isNowAuth.real_welder_check.decision`**
- **Amaç**: real_welder güncellemeleri için kararı logla
- **Loglanan Veriler**:
- `action`: "allow_without_time_limit" veya "continue_to_time_check"
- `reason`: "welder_fields_empty" veya "welder_fields_filled"
- **Ne Zaman**: real_welder güncellemeleri için zaman limitini atlayıp atlamayacağına karar verildikten sonra
**`isNowAuth.level_check.status`**
- **Amaç**: Kullanıcı seviye kontrol durumunu logla
- **Loglanan Veriler**:
- `user_id`: Mevcut kullanıcının ID'si
- `user_level`: Mevcut kullanıcının seviyesi
- `allowed_levels`: Zaman limitini atlayan seviyelerin dizisi
- `level_in_allowed`: Kullanıcının istisna listesinde olup olmadığını gösteren boolean
- **Ne Zaman**: Kullanıcı seviyesinin özel ayrıcalıklara sahip olup olmadığı kontrol edilirken
**`isNowAuth.level_check.decision`**
- **Amaç**: Kullanıcı seviyesine dayalı kararı logla
- **Loglanan Veriler**:
- `action`: "allow"
- `reason`: "user_level_in_exception_list"
- `user_level`: Kullanıcının seviyesi
- **Ne Zaman**: Kullanıcı seviyesi zaman limitinden muafiyet sağladığında
- **Aksiyon**: true döner (güncellemeye izin verir)
**`isNowAuth.time_limit_check.initiating`**
- **Amaç**: Zaman limiti kontrolü yapılmak üzereyken logla
- **Loglanan Veriler**:
- `user_level`: Kullanıcının seviyesi
- `welding_date`: Kayıttaki kaynak tarihi
- `created_at`: Kayıt oluşturma zaman damgası
- **Ne Zaman**: checkWeldLogTimeLimit fonksiyonu çağrılmadan önce
**`isNowAuth.decision`**
- **Amaç**: Final yetkilendirme kararlarını logla
- **Loglanan Veriler**:
- `action`: "allow" veya "deny"
- `reason`: Kararın neden alındığının açıklaması
- **Ne Zaman**: Fonksiyonun çeşitli çıkış noktalarında
- **Olası Sebepler**:
- "welding_date_empty": Kaynak tarihi yok, güncellemeye izin verildi
- "not_weld_logs_table": Farklı tablo, özel kural yok
#### 2. isOnlyRealWelderFieldsUpdate Fonksiyonu
Sadece real_welder alanlarının güncellenip güncellenmediğini belirleyen yardımcı fonksiyon.
##### Log Anahtarları:
**`isOnlyRealWelderFieldsUpdate.analysis`**
- **Amaç**: Güncellenen alanların detaylı analizini logla
- **Loglanan Veriler**:
- `updating_fields`: Güncellenen tüm alanların dizisi
- `has_real_welder_update`: Herhangi bir real_welder alanının dahil olup olmadığını gösteren boolean
- `other_fields`: Güncellenen real_welder olmayan alanların dizisi
- `is_only_real_welder_update`: Boolean nihai sonuç
- `real_welder_field_values`: real_welder_1 ve real_welder_2 değerlerini içeren nesne
- **Ne Zaman**: Bu fonksiyon her çağrıldığında
#### 3. checkWeldLogTimeLimit Fonksiyonu
Güncellemenin izin verilen zaman limiti içinde olup olmadığını doğrular.
##### Log Anahtarları:
**`checkWeldLogTimeLimit.start`**
- **Amaç**: Fonksiyon başlangıcını logla
- **Loglanan Veriler**:
- `query_id`: Kontrol edilen kayıt ID'si
- `created_at`: Kayıt oluşturma zaman damgası
- `created_at_is_null`: Boolean kontrol
- **Ne Zaman**: Fonksiyon başlangıcında
**`checkWeldLogTimeLimit.calculation`**
- **Amaç**: Zaman farkı hesaplamalarını logla
- **Loglanan Veriler**:
- `created_at`: Kayıt oluşturma zamanı
- `current_time`: Mevcut zaman damgası
- `allowed_hour_limit`: Ayarlardan alınan maksimum izin verilen saat
- `actual_hour_difference`: Hesaplanan saat farkı
- `within_limit`: İzin verilen zaman içinde olup olmadığını gösteren boolean
- **Ne Zaman**: Zaman farkları hesaplandıktan sonra
**`checkWeldLogTimeLimit.decision`**
- **Amaç**: Final zaman limiti kararını logla
- **Loglanan Veriler**:
- `action`: "allow" veya "deny"
- `reason`: Kararın açıklaması
- `hour_difference`: Geçen gerçek saatler (allow için)
- `allowed_limit`: İzin verilen maksimum saat (allow için)
- `exceeded_by`: Limitin üzerindeki saatler (sadece deny için)
- **Ne Zaman**: Karar dönmeden önce
- **Olası Sebepler**:
- "within_time_limit": Güncellemeye izin verildi
- "exceeded_time_limit": Güncelleme engellendi
- "created_at_is_null": Oluşturma tarihi yok, engellendi
### Hata Ayıklama için Bu Logları Nasıl Kullanırız
#### 1. Tüm isNowAuth İşlemlerini İzle
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth"
```
#### 2. Belirli Yetkilendirme Hatalarını İzle
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.welder_check.blocked"
```
#### 3. Zaman Limiti İhlallerini İzle
```bash
tail -f storage/logs/laravel.log | grep "checkWeldLogTimeLimit.decision" | grep "deny"
```
#### 4. Real Welder Güncellemelerini İzle
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.real_welder_check"
```
#### 5. Kullanıcı Seviye İstisnalarını İzle
```bash
tail -f storage/logs/laravel.log | grep "isNowAuth.level_check"
```
### Yaygın Hata Ayıklama Senaryoları
#### Senaryo 1: Güncelleme Engellendi - Nedenini Bul
1. Loglarda kayıt ID'sini ara:
```bash
grep "query_id.*123" storage/logs/laravel.log | grep isNowAuth
```
2. Karar loglarına bak:
```bash
grep "isNowAuth.decision\|isNowAuth.welder_check.blocked" storage/logs/laravel.log
```
#### Senaryo 2: Zaman Limiti Sorunları
1. Zaman hesaplamalarını kontrol et:
```bash
grep "checkWeldLogTimeLimit.calculation" storage/logs/laravel.log | tail -1
```
2. Kararı incele:
```bash
grep "checkWeldLogTimeLimit.decision" storage/logs/laravel.log | tail -1
```
#### Senaryo 3: Real Welder Güncelleme Problemleri
1. Sadece real_welder güncellemesi olarak tanınıp tanınmadığını kontrol et:
```bash
grep "isOnlyRealWelderFieldsUpdate.analysis" storage/logs/laravel.log | tail -1
```
2. Kaynakçı alan durumunu kontrol et:
```bash
grep "isNowAuth.real_welder_check.welder_status" storage/logs/laravel.log | tail -1
```
### Log Seviyeleri
Tüm loglar `Log::debug()` kullanır, bu da şu anlama gelir:
- `.env` dosyasında `APP_DEBUG=true` olduğunda log dosyasında görünürler
- Varsayılan olarak production'da görünmezler (performans için)
- Log girdilerinde "DEBUG" seviyesini kullanırlar
### En İyi Uygulamalar
1. **Logları her zaman sırayla kontrol et**: `isNowAuth.start`'tan final karara kadar akışı takip et
2. **Grep'i context ile kullan**: Çevresindeki logları görmek için `-A 5 -B 5` ekle
3. **Zaman damgasına göre filtrele**: Belirli sorunları debug ederken zaman aralığına göre filtrele
4. **Önemli log bölümlerini kaydet**: İlgili logları dokümantasyon için dışa aktar
5. **Production'ı dikkatli izle**: Production'da debug logları sadece geçici olarak etkinleştir
### Performans Değerlendirmeleri
- Debug loglar sadece `APP_DEBUG=true` olduğunda yazılır
- Her yetkilendirme kontrolü 5-15 log girdisi oluşturur
- Log dosyası rotasyonu düzgün yapılandırılmalıdır
- Yüksek hacimli sistemler için log analiz araçları kullanmayı düşünün