1: #!perl 2: # 1. errorlog.pl parses and displays apache errorlogs 3: # 2. just change $error_log and $apache to your paths 4: # 3. cookies remember the list size and filter status 5: 6: use strict; 7: use CGI qw(:standard); 8: use CGI::Cookie; 9: use HTML::Entities; 10: 11: my$error_log = 'c:\path\to\error.log'; # CHANGE 12: my$apache = 'c:\path\to\Apache\Apache.exe: '; # CHANGE but, leave space at end. 13: my$show = 10; # default number of errors to show 14: my@EL = stat $error_log; 15: 16: my%cookies = fetch CGI::Cookie; 17: my%i = map{$_ => param($_)} param; 18: my$url = url(); 19: my$time = localtime(); 20: $time =~s| .{4}$||o; 21: 22: open (ELOG,"<".$error_log) or die "$!"; 23: my@elog=<ELOG>; 24: close (ELOG) or die "$!"; 25: 26: my($cc,$c1,$c2); 27: 28: if($cookies{'show'}){ 29: unless($i{'n'}=~/\d+/){ 30: $show = $cookies{'show'}->value; 31: } 32: } 33: if($i{'n'}=~/\d+/){ 34: $show=$i{'n'}; 35: $c1 = new CGI::Cookie(-name=>'show',-value=>"$show",-expires=>'+1y'); 36: } 37: if(($cookies{'clean'}=~/yes/) or ($i{'do'}=~/clean/)){ 38: if($i{'do'}=~/clean/){ 39: $c2 = new CGI::Cookie(-name=>'clean',-value=>'yes',-expires=>'+1y'); 40: } 41: $cc=' checked'; 42: } 43: if(($i{'go'}=~/show/) && ($i{'do'}!~/clean/)){ 44: $c2 = new CGI::Cookie(-name=>'clean',-value=>'no',-expires=>'+1y'); 45: $cc=(); 46: } 47: 48: print header(-cookie=>[$c1,$c2]); 49: print<<HTML; 50: <html><head> 51: <title>$show Recent $ENV{'SERVER_NAME'} Server Errors</title> 52: <SCRIPT LANGUAGE="JavaScript"><!-- 53: function me(){ 54: document.forms[0].elements[0].select(); 55: document.forms[0].elements[0].focus();} 56: //--></SCRIPT></head> 57: <body bgcolor="#c0c0c0" text="#000000" onload="me()"> 58: <table border="0" cellpadding="0" cellspacing="0" width="100%"> 59: <tr><form method="post"><td> 60: <h3>$show Recent <a href="http://$ENV{'SERVER_NAME'}/"> 61: $ENV{'SERVER_NAME'}</a> Server Errors<br> 62: <font size="-1">$time</font><br></h3></td> 63: <td align="right"><small> 64: clean</small><input type="checkbox" name="do" value="clean"$cc> 65: <input type="text" name="n" value="$show" size="3" maxlength="4" onfocus="select()"> 66: <input type="submit" name="go" value="show"></td> 67: <td rowspan="2"> </td></form></tr></table> 68: <hr> 69: HTML 70: @elog=reverse(@elog); 71: my$c=0; 72: foreach my $ln(@elog){ 73: unless($c==$show){ 74: &encode_entities($ln); 75: $ln=~s|\Q$apache||oi; 76: if($cc=~/checked/){ 77: $ln=~s/\s\[(?:notice|error|warn)\]\s\[client.*\]//o; 78: $ln=~s/\s2\d{3}]/\]<br>/o; 79: $ln=~s/\[/<small><b>/o; 80: $ln=~s|\]|</b></small>\n|o; 81: } 82: print $ln.'<hr>'; 83: $c++ 84: } 85: } 86: print<<HTML; 87: <table width="100%"><tr><td colspan="2" align="right"><font size="-1"> 88: <a href="file://$error_log">$error_log</a> = $EL[7] bytes</td></tr></table></body></html> 89: HTML 90: exit
Back to
Craft