Suche Logparser/Logsplitter..Viel Text rein, wenig Text raus

nice

Enthusiast
Thread Starter
Mitglied seit
20.02.2006
Beiträge
1.869
Ich such ein Tool, in das ich eine (oder am besten mehrere) PlainText.Logfiles reinschieben kann und das jede Zeile Zeile behält, die einer RegExp entsprechen und einem gewissen Header (definierte Anzahl an Zeilen)..

Das Ganze sollte auch mit Logs über 1GB Dateigröße umgehen können, möglichst portabel sein und am Besten Scriptbar/Profile abspeicherbar sein/haben

Ideen?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Da es hier um Scripting & Programmieren geht -- warum nicht selber machen?
 
Weil das ein Standardproblem vieler Programmierer ist, die mal halbwegs Datenintensiv gearbeitet haben und ich mir nicht vorstellen kann, dass es sowas nicht gibt. Vorallem, da der resourcenschonende Umgang mit großen Dateistreams auch nicht ganz ohne ist.
 
Weil das ein Standardproblem vieler Programmierer ist, die mal halbwegs Datenintensiv gearbeitet haben und ich mir nicht vorstellen kann, dass es sowas nicht gibt. Vorallem, da der resourcenschonende Umgang mit großen Dateistreams auch nicht ganz ohne ist.

Das Standardproblem vieler Programmierer ist nicht die Auswertung von überdiemensionierten Logdateien. Das Problem ist eher, dass das schreiben solcher Logdateien sehr viel Performance kostet und am Ende ist die Datei voller überflüssiger Informationen und damit Nutzlos.

Was hilft sind Programme wie zum Beispiel Log4J, die nur das Loggen was wirklich wichtig ist.
 
Da geb ich dir recht, wenn man die Software, welche man debuggt selbst schreibt oder man direkten Zugriff auf die Systeme hat. Die möglichkeit hab ich aber nicht, wenn ich von verschiedenen Seiten Logs bekomme, mit denen ich dann unseren Zulieferern Fehler in deren Implementation nachweisen muss. V-Modell is nun mal was feines ;(
 
Wenn dort etwas in der Art wie Log4J im Einsatz ist, musst du nur die dazugehörige Konfigurationsdatei anpassen. Dafür brauchst du weder direkten Zugriff auf das System noch musst du irgendwas Debuggen.

Frag besser erst mal nach was es da für Konfigurationsmöglichkeiten gibt bevor du dir unnötig Arbeit machst.
 
Ich kenn die Möglichkeiten, keine Angst... die "Einsender" der Logs eher selten... und ich hab eben nur ein Interface/Teil in Verantwortung... die Möglichkeit, weniger Log zu erzeugen, gibts nun mal kaum in dem Szenario (ausser selbst nachstellen, was in 90% der Fälle gemacht wird)
 
Ich sehe jetzt auch nicht wo das Problem sein sollte, selbst ein Script zu schreiben. zZ mit Python wäre dies sicherlich mit wenigen Zeilen Code erledigt. Ob es da ein fertiges Tool gibt bezweifle ich auch, da sich die Thematik trivial anhört.

ggf könntest du mal ein Ausschnitt vom Log hier Posten.
 
Ganz einfache CAN-Traces mit mehreren Millionen Zeilen ala:
Prequel
Header-Infos
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
zeit ID Payload Kram
....

Nun gibts verschiedene ID-Gruppen, die relevant und zugehörig sind und verschiedene komplett unabhängige Gruppen..
Mir nutzt idR immer nur eine Gruppe was, sodass aus 2Mio Zeilen mal 80 werden... und 2Mio ist da ein eher kleiner Log.
 
Sind die Daten irgendwie CSV-artig getrennt ? Wenn ja könntest du evtl. auch die Log-Datei in eine Datenbank einlesen, Index bilden lassen und dann relativ schnell Daten sortiert ausgeben.

Ansonsten sollte z.B. StreamReader in C# mit Logs bis 10GB noch einigermaßen gut klarkommen.
Gerade getestet mit 800k Zeilen / ~600 Zeichen pro Zeile / ~500MB -> 1 Minute Laufzeit, Auslastung & Speicherverbrauch waren laut Taskmgr. vernachlässigbar.

Code:
    class Program
    {
        private static string file = @"D:\test\file.txt";
        private static string outfile = @"D:\test\out.txt";
        private static string pattern = @"[ ]([\d]{1,2})[;]+";

        private static StreamWriter fileWriter;

        static void Main(string[] args)
        {
            fileWriter = new StreamWriter(outfile, true);
            ReadTxtFile();
            fileWriter.Close();

            Console.WriteLine("fertig");
            Console.ReadLine();
        }

        private static void ReadTxtFile()
        {
            string filePath = string.Empty;

            using (StreamReader sr = new StreamReader(file))
            {
                Regex r = new Regex(pattern);
                double i = 0;

                String line;
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(i);
                    i++;

                    if (r.IsMatch(line))
                    {
                        append(line);
                    }
                }
            }
        }

        private static void append(string line)
        {
            fileWriter.WriteLine(line);
        }
    }
 
Soll ich dir mal was ganz peinliches gestehen?
Ich bin zwar in der Entwicklung, aber an unserer Stelle haben wir keinerlei Entwicklungstools installiert (und es ist auch nicht wirklich gern gesehen)... und zuhaus programmier ich mir da sicher nix.
Mittlerweile hab ich auch schon an eine Batch mit UnixTools für Windows gedacht, aber die bringen ja dummerweise auch tausend Abhängigkeiten mit sich... ein grep/head/tail würde voll und ganz reichen (sed/busybox optional). Sowas als portable ohn e externe Abhängigkeiten, das wärs..

Wundert mich aber fast, dass dein Code so "langsam" ist, derzeit mach ichs mit Notepad++ und LineSplitter als Plugin und brauch 10sec pro GB, leider ist das nicht scriptbar und erlaubt von sich aus auch keine Profile.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh