diff -urN ../htmllint.orig/htmllint.cgi ./htmllint.cgi
--- ../htmllint.orig/htmllint.cgi Fri May 9 01:21:00 2014
+++ ./htmllint.cgi Fri May 9 01:22:00 2014
@@ -213,7 +213,7 @@
&ErrorExit($LOGSDIR.$msgCannotMkdir);
}
} else {
- $SCOREFILE = $SCORECOUNTER = $STATFILE = '';
+ $SCOREFILE = $SCORECOUNTER = $STATFILE = $ERRORFILE = '';
}
# HTMLをローカルに得る
@@ -997,6 +997,7 @@
sub ErrorExit
{
my (@msgs) = @_;
+ &LogError(@msgs) if $ERRORFILE;
&PrintHTMLHeader("$PROGNAME error!");
&Jprint(qq|
$PROGNAME error!
\n|);
while (@msgs) {
@@ -1082,6 +1083,38 @@
EndOfHTMLFooter
}
+# エラーの記録
+sub LogError
+{
+ my $errmsg = join('', @_);
+ $errmsg =~ s// /oig;
+ $errmsg =~ s/<\/?.*?>//oig;
+ $errmsg =~ s/&/&/oig;
+ $errmsg =~ s/<//oig;
+#$errmsg =~ s/"/"/oig;
+
+ my $request = $ENV{'REQUEST_METHOD'};
+ my $method = $cgi->param('Method');
+ $method =~ s/(\W)/'%'.unpack('H2',$1)/oge; # 念のため
+ $method ||= '-';
+
+ my $file = $ERRORFILE;
+ my ($sec, $min, $hour, $mday, $mon, $year) = localtime(time);
+ my $post = sprintf('%04d%02d', 1900+$year, 1+$mon);
+ $file =~ s/#/$post/g;
+ my $existfile = -e $file;
+ if (open(LOGF, ($existfile? '>>': '>').$file)) {
+ flock(LOGF, 2) if $UNIX;
+ my $rhost = ($ENV{REMOTE_HOST} or $ENV{REMOTE_ADDR});
+ print LOGF sprintf('%04d/%02d/%02d %02d:%02d:%02d', 1900+$year, 1+$mon, $mday, $hour, $min, $sec),
+ " $rhost $request $method \"$errmsg\"\n";
+# flock(LOGF, 8) if $UNIX;
+ close(LOGF);
+ chmod 0766, $file;
+ }
+}
+
# 得点の記録
sub LogScore
{
diff -urN ../htmllint.orig/htmllintenv ./htmllintenv
--- ../htmllint.orig/htmllintenv Sun May 4 00:30:00 2014
+++ ./htmllintenv Sun May 4 01:49:41 2014
@@ -98,6 +98,10 @@
#$SCOREFILE = "${LOGSDIR}score#.log";
#$SCORECOUNTER = "${LOGSDIR}score.cnt";
+# エラー記録用ログファイル (不要ならコメントアウト)
+# # の部分は年月に置き換わります
+$ERRORFILE = "${LOGSDIR}error#.log";
+
# 警告の統計用ログファイル (不要ならコメントアウト)
# # の部分は年月に置き換わります
#$STATFILE = "${LOGSDIR}statistics#.log";