Giriş
Windows işletim sisteminde, çoğu uygulama ve hizmet olayları standart ikili Olay Görüntüleyici günlük dosyalarına (.evtx) kaydeder. Ancak, bazı üçüncü taraf uygulamalar, özel hizmetler veya eski sistem bileşenleri, hata ayıklama veya denetim amaçları için basit düz metin (TXT, LOG) dosyalarını kullanmayı tercih eder. Bu tür dosyaları manuel olarak sürekli kontrol etmek zahmetli ve verimsizdir. PowerShell, Get-Content -Wait komutu sayesinde bu düz metin günlük dosyalarını gerçek zamanlı olarak izlemek için güçlü ve esnek bir çözüm sunar.
Sorun: Düz Metin Günlüklerinin Manuel İzlenmesi
Sorun, bir uygulamanın veya hizmetin ürettiği olayları anında görmek istediğimizde ortaya çıkar. Örneğin, bir web sunucusunun erişim günlükleri veya bir veritabanı bağlantı deneme günlükleri sürekli güncellenir. Bu dosyaları düzenli aralıklarla açıp kaydın sonuna gitmek, özellikle yüksek hacimli günlüklerde zaman kaybıdır ve kritik olayları kaçırma riskini taşır.
Çözüm: PowerShell ve Get-Content -Wait Kullanımı
PowerShell'deki Get-Content cmdlet'i, dosya içeriğini okumak için kullanılır. -Wait parametresi eklendiğinde, komut dosyanın sonuna ulaşır ve dosya güncellenmeyi bekler. Yeni satırlar dosyaya eklendiğinde, PowerShell bu yeni satırları hemen konsola aktarır, böylece gerçek zamanlı izleme sağlanmış olur.
Adım Adım Gerçek Zamanlı Günlük İzleme
Adım 1: İzlenecek Günlük Dosyasını Belirleme
Öncelikle, izlemek istediğiniz düz metin günlük dosyasının tam yolunu bilmeniz gerekir. Örneğin, bir test uygulamasının günlüğünü izlediğimizi varsayalım:
$LogFilePath = "C:\Logs\MyApp_Debug.log"
Adım 2: Temel Gerçek Zamanlı İzleme Komutu
En basit haliyle, Get-Content -Path ve -Wait parametrelerini kullanarak izlemeyi başlatabilirsiniz:
Get-Content -Path $LogFilePath -Wait
Bu komutu çalıştırdığınızda, PowerShell dosyanın mevcut içeriğini gösterir ve ardından dosyanın sonuna kilitlenir. Dosyaya yeni bir satır eklendiği anda, o satır konsolda görünecektir.
Adım 3: Belirli Anahtar Kelimelere Göre Filtreleme (İsteğe Bağlı)
Genellikle, tüm günlük satırlarını görmek yerine yalnızca belirli hata veya uyarı mesajlarını izlemek istenir. Bu durumda, Where-Object (veya kısa haliyle ?) kullanarak çıktıyı filtreleyebilirsiniz. Örneğin, sadece 'ERROR' içeren satırları izlemek için:
Get-Content -Path $LogFilePath -Wait | Where-Object { $_ -like "*ERROR*" }
İpucu: Büyük harf/küçük harf duyarlılığını kaldırmak için-cmatchyerine-likeveya-matchkullanın. Örneğin:Where-Object { $_ -match "error" }(Bu, 'Error', 'ERROR' veya 'error' kelimelerini yakalar.)
Adım 4: İzlemeyi Otomatikleştirme ve Geliştirme
Daha gelişmiş senaryolarda, izleme işlemini bir döngü içine alarak veya belirli aralıklarla kontrol ederek daha fazla otomasyon sağlayabilirsiniz. Ancak -Wait parametresi zaten sürekli bir izleme sağladığı için, genellikle döngüye gerek kalmaz. Bunun yerine, çıktıyı farklı renklendirebilirsiniz:
Get-Content -Path $LogFilePath -Wait | ForEach-Object {
if ($_ -like "*ERROR*") {
Write-Host $_ -ForegroundColor Red
} elseif ($_ -like "*WARN*") {
Write-Host $_ -ForegroundColor Yellow
} else {
Write-Host $_
}
}
Önemli Hususlar ve Performans
Get-Content -Wait komutu son derece etkilidir, ancak bazı noktaları göz önünde bulundurmak gerekir:
- Kaynak Tüketimi: Komut, dosyayı sürekli açık tutar. Çok büyük günlük dosyalarında (gigabaytlarca) veya çok sık yazılan dosyalarda CPU ve I/O kullanımı artabilir.
- Dosya Kilitlenmesi: Bazı uygulamalar, yazma sırasında dosyayı geçici olarak kilitleyebilir. Bu durumda PowerShell, dosya kilidinin kalkmasını bekler ve ardından okumaya devam eder.
- İzlemeyi Durdurma: Gerçek zamanlı izlemeyi durdurmak için konsolda
Ctrl+Ctuşlarına basmanız yeterlidir.
Bu teknik, Windows Event Log'un (EVTX) ötesindeki özel uygulama günlüklerini izlemek isteyen sistem yöneticileri ve geliştiriciler için vazgeçilmez bir araçtır.



