Benutzer mit den meisten Antworten
Millisekunden aus einem Log filtern

Frage
-
Hallo liebe Community,
ich habe da mal wieder eine Frage. Ich möchte gerne aus einem Log nur einen bestimmten Teil in ein Variable speichern. Nun habe ich schon herausgefunden, dass man dies vermutlich am besten mit RegEx erreicht. Das Log sieht folgendermaßen aus:
Nun ist alles vor dem "Time used:" immer unterschiedlich, sowie dahinter auch. Gibt es irgendwie eine Möglichkeit, dass ich die Millisekunden hinter "Time used:" da heraus bekomme? RegEx ist aktuell noch absolutes Neuland für mich und wäre da über Hilfe oder Tipps ziemlich dankbar.2021-01-29T10:02:56.081 INFO (4E244D34) ValidateAttributes - Time used: 117ms (sql: 0ms, services: 92ms) 2021-01-29T10:02:56.420 INFO (44F84B38) ImportDocument - Time used: 310ms (sql: 52ms, filesystem: 8ms, services: 183ms, kvstore: 3ms)
Antworten
-
Gibt es irgendwie eine Möglichkeit, dass ich die Millisekunden hinter "Time used:" da heraus bekomme?
Klar. Wenn Du Dir sicher bist, dass das auch immer Millisekunden sind .... ;-)
Beispiel:
$InputString = '2021-01-29T10:02:56.081 INFO (4E244D34) ValidateAttributes - Time used: 117ms (sql: 0ms, services: 92ms)' $InputString -match '(?<=Time used:\s)\d+' $Matches
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:58
-
Wie würde es denn aussehen, wenn ich den Text davor bis zur EventID (bsp.: (4E244D34) ) auch noch haben möchte beziehungsweise in einem nachfolgenden Schritt noch herausfinden möchte.
$InputString = '2021-01-29T10:02:56.081 INFO (4E244D34) ValidateAttributes - Time used: 117ms (sql: 0ms, services: 92ms)' $InputString -match '(?<=INFO\s+\().+?(?=\))' $Matches
OK, das ist dann aber jetzt die Stelle, an der Du bitte anfängst Dich mit Powershell und Regulären Ausdrücken selbst zu beschäftigen. Es gibt ausreichend kostenlose Quellen dafür im Internet. Wir liefern hier keinen gebrauchsfertigen Code auf Anfrage frei Haus. ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:58
-
... mir fehlt aktuell aber noch ein wenig das logische Verständnis für RegEx.
Reguläre Ausdrücke haben meiner Meinung nach nicht viel mit Logik zu tun. Ich würde einfach so lange weiterlernen und weiterprobieren, bis der Groschen irgendwann gefallen ist. ;-)
Ich schau mir immer gern mal das ein oder andere Video an ... für einen Überblick oder Einstieg ist das meistens genug ... hier schon mal ein Tipp:
Es gibt auch mehrere "Test-Seiten", wo man beliebig viel "Spielen" und Ausprobieren kann:
https://regex101.comhttps://regexr.com
... und Dokus gibt's auch genug:
https://www.regular-expressions.info/quickstart.html?wlr=1
Viel Spaß!
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:59
Alle Antworten
-
Gibt es irgendwie eine Möglichkeit, dass ich die Millisekunden hinter "Time used:" da heraus bekomme?
Klar. Wenn Du Dir sicher bist, dass das auch immer Millisekunden sind .... ;-)
Beispiel:
$InputString = '2021-01-29T10:02:56.081 INFO (4E244D34) ValidateAttributes - Time used: 117ms (sql: 0ms, services: 92ms)' $InputString -match '(?<=Time used:\s)\d+' $Matches
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:58
-
Moin,
die einfachste Variante wäre
Time used: (?<used>.*)ms \(
Wenn Du dann auf -match prüfst, hat die Variable $Matches['used'] den gewünschten Wert.
Evgenij Smirnov
-
Danke für eure schnellen Antworten. Ja es handelt sich dabei immer um Millisekunden, diese können aber durchaus auch zwischen 1 und 4 Stellig sein.
Wie würde es denn aussehen, wenn ich den Text davor bis zur EventID (bsp.: (4E244D34) ) auch noch haben möchte beziehungsweise in einem nachfolgenden Schritt noch herausfinden möchte. Davon gibt es in etwa 200 unterschiedliche Texte. Ziel dabei ist es, den String mit dem Event getrennt von der Zeit (ms) zu übergeben. Sprich das Event speichere ich in einen String und die Time Used in ein Int. Die ganze Geschichte dient später zur Erfassung von Performancedaten. Ich hoffe ich habe das verständlich ausgedrückt :-D
-
Wie würde es denn aussehen, wenn ich den Text davor bis zur EventID (bsp.: (4E244D34) ) auch noch haben möchte beziehungsweise in einem nachfolgenden Schritt noch herausfinden möchte.
$InputString = '2021-01-29T10:02:56.081 INFO (4E244D34) ValidateAttributes - Time used: 117ms (sql: 0ms, services: 92ms)' $InputString -match '(?<=INFO\s+\().+?(?=\))' $Matches
OK, das ist dann aber jetzt die Stelle, an der Du bitte anfängst Dich mit Powershell und Regulären Ausdrücken selbst zu beschäftigen. Es gibt ausreichend kostenlose Quellen dafür im Internet. Wir liefern hier keinen gebrauchsfertigen Code auf Anfrage frei Haus. ;-)
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:58
-
Dankeschön :-)
Ich beschäftige mich damit schon etwas länger, mir fehlt aktuell aber noch ein wenig das logische Verständnis für RegEx. Habe leider meine Probleme damit. Ich habe auch schon eine Menge ausprobiert, das führte jedoch nicht zu dem gewünschtem Erfolg.
-
... mir fehlt aktuell aber noch ein wenig das logische Verständnis für RegEx.
Reguläre Ausdrücke haben meiner Meinung nach nicht viel mit Logik zu tun. Ich würde einfach so lange weiterlernen und weiterprobieren, bis der Groschen irgendwann gefallen ist. ;-)
Ich schau mir immer gern mal das ein oder andere Video an ... für einen Überblick oder Einstieg ist das meistens genug ... hier schon mal ein Tipp:
Es gibt auch mehrere "Test-Seiten", wo man beliebig viel "Spielen" und Ausprobieren kann:
... und Dokus gibt's auch genug:
https://www.regular-expressions.info/quickstart.html?wlr=1
Viel Spaß!
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Samstag, 30. Januar 2021 16:00
-
... mir fehlt aktuell aber noch ein wenig das logische Verständnis für RegEx.
Reguläre Ausdrücke haben meiner Meinung nach nicht viel mit Logik zu tun. Ich würde einfach so lange weiterlernen und weiterprobieren, bis der Groschen irgendwann gefallen ist. ;-)
Ich schau mir immer gern mal das ein oder andere Video an ... für einen Überblick oder Einstieg ist das meistens genug ... hier schon mal ein Tipp:
Es gibt auch mehrere "Test-Seiten", wo man beliebig viel "Spielen" und Ausprobieren kann:
https://regex101.comhttps://regexr.com
... und Dokus gibt's auch genug:
https://www.regular-expressions.info/quickstart.html?wlr=1
Viel Spaß!
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Als Antwort markiert StythEU Freitag, 29. Januar 2021 16:59
-
...ich habe mit regextester.com schon eine Menge rumgespielt.
Probier doch mal https://regex101.com. Da wird Dir in der rechten Spalte erläutert, was und warum "gematcht" wurde. Das hilft auch immer sehr beim Verstehen.
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''