Thread Logfile durchsuchen
(16 answers)
Opened by juma at 2009-09-17 14:57 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #! /usr/bin/perl -w # Auch strict verwenden use strict; my $Kursname = "server12.KursServer"; my $KursErg = "Ergebnis.Log"; my $Logpath = "data/home/user1/Perl"; my $Log = "$Kursname.2009-08-21.log"; my $Variable = "HTTP ERROR"; # Das ist kein korrektes open: #open ($Logpath, "<Log>"); #print "Error message: text/Log\n"; # korrekt: open(my $logfh, '<',"$Logpath/$Log") or die "ERROR open("$Logpath/$Log") ($!)\n"; # my vergessen! my @ErrorList = (); # nicht korrekt, # es existieren die Variablen nicht! #foreach $Line (Logpath) # korrekt: #foreach my $Line (<$logfh>) # hier wird aber die gesamte Datei auf einmal eingelesen, # was gerade bei Logfiles zu einem extremen Speicherverbrauch führt # besser: while(my $Line=<$logfh>) { # falsch das ist eine Zuweisung und kein Vergleich #if ($Line = ($Variable)) # korrkt: #if($Line eq $Variable) # das prüft aber, # ob die gesamte Zeile wie der String in "$Variable" aussieht # was du vermutlich willst, # ist zu wissen ob der String in "$Variable" in "$Line" enthalten ist # besser: if(index($Line,$Variable)>-1) { # Was willst du hier bitte ausgeben "$" ist keine Variable #print "- ".$."<BR>"; # und es exstiert auch kein "$KursErg" das ein anonymes Array ist # und "$1" ist leer, da du keinen regulären Ausdruck verwendet hast. #push(@$KursErg, $1); # ich vermute du willst das hier machen: print "$Line<br>\n"; push(@ErrorList,$Line); } } close $logfh; # das kann man so machen #open (OUT,">KursErg"); # besser: open(my $outfh, '>', "$KursErg") or die "ERROR open($KursErg) ($!)\n"; # das ist so nicht korrekt #print OUT @$KursErg; # richtig: print $outfh join('',@ErrorList); # alternativ: # ("foreach" ist gleichbedeutend mit "for", perl erkennt was gemeint ist) # for my $line (@ErrorList) # { # print $outfh $line; # } close $outfh; |