Leser: 22
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
#!/usr/bin/perl -w use strict; use diagnostics; use warnings; use Fcntl qw (:DEFAULT :flock); my %env = ('server_errorlog' => 'testerror.log',); if ($^O =~ /mswin/i) { $env{chmod_dateien} = 0666; } else { $env{chmod_dateien} = 0600; } ############################################################################### local $SIG{__WARN__} = sub { (my $error = shift) =~ s/[\r\n]//g; &errorlog_eintrag ($error,4); }; local $SIG{__DIE__} = sub { (my $error = shift) =~ s/[\r\n]//g; &errorlog_eintrag ($error,7); close (STDERR); }; # Hier Programm, dass Fehler macht my $a; my $b = $a + 3; # __WARN__ "Use of uninitialized value $a in addition (+) at sig.pl line ..." print "Bin noch da in " . __LINE__ . "\n"; if (1==2) { alarm (2); while (1==1) {} # __DIE__ "Terminating on signal SIGALRM(14)" } print "Bin noch da in " . __LINE__ . "\n"; if (1==1) { $a = 7/0; # __DIE__ "Illegal division by zero at sig.pl line ..." } print "Bin noch da in " . __LINE__ . "\n"; ############################################################################### sub errorlog_eintrag { my $meldung = shift; my $level = shift; my %apache_loglevel = ( 1 => 'debug', 2 => 'info', 3 => 'notice', 4 => 'warn', 5 => 'error', 6 => 'crit', 7 => 'alert', 8 => 'emerg', ); if (sysopen (my $errorlog,$env{server_errorlog},O_WRONLY|O_APPEND|O_CREAT,$env{chmod_dateien})) { print $errorlog '[' . localtime () . '] [' . $apache_loglevel{$level} .'] [client ' . (defined $ENV{'REMOTE_ADDR'} ? $ENV{'REMOTE_ADDR'} : 'localhost') . '] ' . $meldung . "\n"; close $errorlog; } }
2010-03-05T14:41:41 murphyAlso bei mir (perl, v5.10.0 built for i486-linux-gnu-thread-multi) führt ein nicht abgefangenes Alarmsignal in Deinem Testprogramm weder zu einem Aufruf von $SIG{__WARN__}->(...) noch zu einem von $SIG{__DIE__}->(...).
1
2
[Fri Mar 5 15:49:37 2010] [warn] [client localhost] Use of uninitialized value $a in addition (+) at sig.pl line 23.
[Fri Mar 5 15:49:39 2010] [warn] [client localhost] Terminating on signal SIGALRM(14)
2010-03-05T15:40:43 murphyIn biancas Fall ist es vielleicht sinnvoll beim Programmstart einen globalen Alarmhandler zu setzen: