C# ile log dosyası parse etmek ?

zamonda (1) 4 yıl önce sordu

Merhaba,

Staja başlayacağım şirket bana bir log dosyası verdi , bu log dosyasında parsing işlemi gerçekleştirmemi bunu yaparken de minimum kaynak kullanımı sağlanmasını istemekte. (CPU, RAM, I/O gibi değerler) . Sonrasında bu elde edilen bilgilerden gerekli soruların cevaplarını bulmamı istiyor.( Mesela En çok izlenen içerik?    (Örnek:   ID_0000012705))

Fakat daha önce bu konularda hiç tecrübem olmadığı nereden başlayacağımı bilemiyorum. İngilizcem iyi fakat bu tarz bir içeriği yabancı forumlarda bile tam olarak bulamadım. Yardımcı olabilir misiniz ?

Log dosyasının içindeki örnek satır aşağıda

104.34.97.60 - - [05/Oct/2015:06:37:26 +0300] "GET /q/jI/ID_0000012705.ism/QualityLevels(1463176)/Fragments(video=7746000000) HTTP/1.1" 200 740649 "-" "Firefox/1.5" "-" rt=0.000 ut="-" cs=HIT

ÖNEMLİ NOT : Bu konunun neredeyse aynısı 3 yıl önce başkası tarafından sorulmuş fakat arkadaş cevap alamayınca gayet seviyesiz şeyler yazmış. O kişi kesinlikle ben değilim ve benimle de en ufak bir alakası bulunmamaktadır. 

 

Toplam 1 cevap


alattin (17125) 4 yıl önce cevapladı

Kullanman gereken tüm sınıtlar System.IO altında mevcut.

Log dosyası da bir text dosyası. Bu sebepten normal text dosyası okur gibi içeriğini okuyabilirsin:

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        string path = @"c:\temp\Log.txt";       

       
        using (StreamReader sr = File.OpenText(path))
        {
            string s;
            while ((s = sr.ReadLine()) != null)
            {
                Console.WriteLine(s);
            }
        }
    }
}

Kendi oluşturduğun objelere verileri depolayabilirsin. Sonra da istediğin gibi sıralama, en çok izlenen değeri alma gibi işlemleri gerçekleştirebilirsin. Linq sana bu konuda yardımcı olur.

Okuma, analiz gibi işlemleri Linq ile halledebilirsin. İşin kolayına kaçıp şu şekilde de ilerleyeyebilirsin.

var result = File.ReadAllLines("log.txt")
    .Select(line => line.Split(' '))
    .AsEnumerable();

Bunu da bir koleksiyonda toplar sonra işlersin. 

zamonda 4 yıl önce

Çok teşekkür ederim sağolun.