Thread Logfile durchsuchen (16 answers)
Opened by juma at 2009-09-17 14:57

topeg
 2009-09-17 15:25
#125911 #125911
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
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;

View full thread Logfile durchsuchen