Leser: 28
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
#! /usr/bin/perl -w
use XML::Parser;
use Data::Dumper;
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";
open ($Logpath, "<Log>");
print "Error message: text/Log\n";
@ErrorList = ();
foreach $Line (Logpath)
{
if ($Line = ($Variable))
{
print "- ".$."<BR>";
push(@$KursErg, $1);
}
}
open (OUT,">KursErg");
print OUT @$KursErg;
close (OUT);
foreach $Line (Logpath)
open ($Logpath, "<Log>");
QuoteEs schmeisst mir immer die Error message raus
if ( $Line =~ m/$Variable/ )
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;
Quote# Das ist kein korrektes open:
#open ($Logpath, "<Log>");
Quote# das ist so nicht korrekt
#print OUT @$KursErg;
# richtig:
print $outfh join('',@ErrorList);
print OUT @array
print OUT join('', @array)
print OUT @array
print OUT join('', @array)
print OUT @array,"\n"
print OUT @array."\n"
print "@array";
2009-09-17T15:00:25 topeg
print OUT join('', @array, "\n")
print OUT join('', @array. "\n")
open(my $logfh, '<', "$Logpath/$Log") or die "Error open("$Logpath/$Log") ($!)\n;
1
2
3
4
5
6
Scalar found where operator expected at ./KursLog.pl line 24, near ""Error open("$Logpath"
(Missing operator before $Logpath?)
String found where operator expected at ./KursLog.pl line 24, near "$Log") ($!)\n""
(Missing operator before ") ($!)\n"?)
syntax error at ./KursLog.pl line 24, near ""Error open ("$Logpath"
Execution of ./KursLog.pl aborted due compilation errors.
Guest jumaCode: (dl )open(my $logfh, '<', "$Logpath/$Log") or die "Error open("$Logpath/$Log") ($!)\n;
1 2 3 4 5
# qq() verwenden, siehe perldoc perlop ... or die qq{Error open("$Logpath/$Log") ($!)\n}; # oder einfache anführungszeichen benutzen or die "Error open('$Logpath/$Log') ($!)\n";
Guest juma1. Wie kann ich, wenn ich die Line im Logfile mit dem HTTP-ERROR gefunden habe, die Line davor noch mit ausgeben. Problem dabei ist, das ich nicht nach einer weiteren Variable suchen kann, da die Line davor mit den Informaitonen immer anderst aussehen kann.
Quote2. Und wie kann ich das aktuelle Datum auslesen? Dieses muss dann noch in das Format yyyy-mm-dd umgewandelt werden.
1 2 3 4 5 6 7 8 9 10
my $LastLine=''; while(my $Line=<$logfh>) { if(index($Line,$Variable)>-1) { print "$Line$LastLine<br>\n"; push(@ErrorList,$LastLine,$Line); } $LastLine=$Line; }