Schrift
[thread]7642[/thread]

Mit Regexp Werte aus fortlaufender LogDatei filter

Leser: 1


<< |< 1 2 >| >> 15 Einträge, 2 Seiten
xiconfjs
 2006-01-21 23:02
#62121 #62121
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

ich weiß, bestimmt kommt jetzt wieder "guck doch inna Doku" oder "nutze die Suchfunktion", aber das habe ich schon getan, und meine auch, alles richtig gemacht zu haben, aber es klappt halt nicht...mhh hab lange gesucht und probiert, aber es will nicht.

Problem:
Ich will aus einer fortlaufenden Log-Datei (es soll sozulagen "live" ausgelesen werden) die neuen Log-Zeilen (also die unten neu hinzukommen) auslesen, auswerten, und die Werte ausgeben. Doch es kommt entweder zu keiner Ausgabe oder zu dem:
Code: (dl )
Use of uninitialized value in print at test.pl line 13, <LOGDATEI> line 1. 


test.pl
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use IO::Socket::INET;

my $file = 'test.log';
open(LOGDATEI,"<$file") or die $!;
seek(LOGDATEI,0,2); #Ans Ende springen
while(1) { #ne Schleife halt :P
while(<LOGDATEI>) { #Datei auslesen
$_ =~ m/(.+?)\ (.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\w(.+?)\ (.+?)\ (.+?\ .+?)\ (.+)(, from )(.+)(] )(.+)/;
print $2; #2. Wert ausgeben
}
sleep 1; #Warten ca. 1 Sekunde :)
}

exit;


test.log
Code: (dl )
1
2
22-07-05 21:02:49,ALL,Info,AccessLog,    SID: 1 [to channel: Testchannel, from Tester] TestText
22-07-05 21:02:49,ALL,Info,AccessLog, SID: 1 [to channel: Testchannel, from Tester] TestText



Ich danke schonmal im Voraus für eure konstruktiven Vorschläge :P


mFg xiconfjs
pKai
 2006-01-22 00:04
#62122 #62122
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Das Beispiel in perldoc -f seek sollte (mit geringen Anpassungen) das tun, was du willst.
I sense a soul in search of answers.
xiconfjs
 2006-01-22 00:28
#62123 #62123
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

Code: (dl )
Das Beispiel in perldoc -f seek sollte (mit geringen Anpassungen) das tun, was du willst.


Wird mir nicht direkt weiterhelfen, denn das geht ja, bloß das Problem leigt bei der RegExp...
Aver trotzdem danke...:D


mFg xiconfjs
bloonix
 2006-01-22 00:34
#62124 #62124
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=xiconfjs,21.01.2006, 22:02]
Code: (dl )
Use of uninitialized value in print at test.pl line 13, <LOGDATEI> line 1. 
[/quote]
Guten Abend xiconfjs,

die Meldung sagt soviel aus, dass $2 in der print-Anweisung "uninitialized"
ist, mit anderen Worten, matched du eventuell nicht richtig oder es gibt
halt Zeilen, auf die deine Suchanforderung nicht zutrifft. Für diesen Fall
solltest du unbedingt eine next-Anweisung nutzen, falls deine Suche erfolg-
los ist.

Darüber hinaus möchte ich dir einen kleinen Tipp geben...

Endlos-Skripts laufen für gewöhnlich nie unendlich, denn es gibt immer mal
einen Grund, weshalb sie gestoppt werden. Wenn dein Skript also irgend-
wann mal beendet und neu gestartet wird, springt es wieder zum Ende der
Logdatei und die neuen Zeilen, die in der Zwischenzeit in die Logdatei
geschrieben wurden, gehen für deine Auswertung - oder was auch immer -
verloren.

Schreib dir am besten die letzte Position des Filehandles in eine temporäre
Datei. Hierfür kannst du die Funktion "tell" nutzen. Wenn dein Skript wieder
gestartet wird, schaut es in der Datei nach, wo es das letzte Mal stehen
geblieben ist und springt zu genau dieser Position. Wenn die Position nicht
ermittelt werden kann, kannst du noch immer zum Ende der Datei springen.

Gruß,
opi\n\n

<!--EDIT|opi|1137882956-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
xiconfjs
 2006-01-22 00:41
#62125 #62125
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

also das mit dem Neustart des Skripts ist kein Problem, denn:
Code: (dl )
Ich will aus einer fortlaufenden Log-Datei (es soll sozusagen "live" ausgelesen werden)


Doch leider weiß ich nicht, warum das nicht mit der Suchanforderung nicht geht...denn das ist mein eigentliches Problem...:0

Trotzdem danke für deine Tipps...
bloonix
 2006-01-22 00:47
#62126 #62126
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=xiconfjs,21.01.2006, 22:02]
Code: (dl )
1
2
22-07-05 21:02:49,ALL,Info,AccessLog,    SID: 1 [to channel: Testchannel, from Tester] TestText
22-07-05 21:02:49,ALL,Info,AccessLog,    SID: 1 [to channel: Testchannel, from Tester] TestText
[/quote]
was brauchst du denn aus dem String?

nur

21:02:49,ALL,Info,AccessLog,

??
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
xiconfjs
 2006-01-22 01:04
#62127 #62127
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

also ich hab ja mit regexp schön alles unterteilt, jedenfalls sollte es so sein :P
Code: (dl )
m/(.+?)\ (.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\w(.+?)\ (.+?)\ (.+?\ .+?)\ (.+)(, from )(.+)(] )(.+)/;

Also ich brauche das, was an der Postion 5,8,10,12 und 14 ist.
Also in dem Beispiel wäre es: "AccessLog", "1", "Testchannel", "Tester" und "TestText"

Ok? :P
bloonix
 2006-01-22 01:24
#62128 #62128
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=xiconfjs,22.01.2006, 00:04]also ich hab ja mit regexp schön alles unterteilt, jedenfalls sollte es so sein :P
Code: (dl )
m/(.+?)\ (.+?)\,(.+?)\,(.+?)\,(.+?)\,(.+?)\w(.+?)\ (.+?)\ (.+?\ .+?)\ (.+)(, from )(.+)(] )(.+)/;
[/quote]

Also schön finde ich das nicht. Du benutzt das Backslash an den falschen
Stellen. Was sollen zudem die ganzen Klammern? Mit jedem () wird eine
neue nummerierte Variable gefüllt. Das brauchst du nicht.

[quote=xiconfjs,22.01.2006, 00:04]Also ich brauche das, was an der Postion 5,8,10,12 und 14 ist.
Also in dem Beispiel wäre es: "AccessLog", "1", "Testchannel", "Tester" und "TestText"[/quote]

Fünf Positionen macht bei mir $1 - $5 :)

Code: (dl )
1
2
   next unless /^.+? .+?,.+?,.+?,(.+?),\s+.+? (\d+) \[.+?: (.+?), from (.+?)\] (.*)$/;
  print "$1 $2 $3 $4 $5\n";


Gruß,
opi\n\n

<!--EDIT|opi|1137885930-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
xiconfjs
 2006-01-22 01:33
#62129 #62129
User since
2006-01-21
79 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi,

thx, ich hab den Fehler gefunden...es liegt irgendwie, warum auch immer, an dem "\n" am ende des print-Befehls...Waaaaruuuuummmm auch immer...:angry:

THX and good night...^^
renee
 2006-01-22 06:02
#62130 #62130
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was meinst Du mit "es liegt an dem \n am Ende von print"?? Hast Du an Dein Beispiel einfach ein "\n" drangehaengt und es geht oder meinst Du, dass opis Code funktioniert??
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2006-01-21 23:02.