Hi all,

I've noticed that under mod_perl any die() (or croak()) calls get rewritten with a timestamp, a loglevel flag, and escaped newlines before going to the error log. For example, under CGI if I call die("hello") from a script called foo.cgi I get:

  hello at /home/zappos/zappos.com/serverroot/foo/foo.cgi line 8.

However, if I put the same exact script under mod_perl using Apache::Registry I get:

[Sat Apr 1 13:25:56 2006] [error] hello at /usr/lib/perl5/site_perl/5.8.6/i586-linux-thread-multi/Apache/Registry.pm
  line 149\n

Has this always been the case? For some reason I feel like this is a change, but I don't have any machines around with old mod_perl versions to try it out.

I am wondering if there is any way around this... or if it is due to some kind of configuration error on my part. As it stands the error becomes pretty obfuscated. And it causes problems if you use croak() from within a module, since it no longer respects the trailing newline you get confusing messages like:

  [Sat Apr  1 13:49:31 2006] [error] DBD::mysql::st execute failed:
Unknown column 'foobar' in 'field list' at /usr/lib/perl5/site_perl/JF/Database.pm
  line 170.\n at /home/zappos/zappos.com/serverroot/noauth/foo.cgi line 10\n

I guess what I am wondering is if there is a way to prevent this rewriting? I understand the benefit of the timestamp, but the change in newline (and tab) handling causes problems for formatting suscinct and clear error messages. I've tried using CORE::die() and it seems to have the same behavior. I was able to get things back to normal with:

  $SIG{__DIE__} = sub { print STDERR @_; exit 1; };

At the top of my script. I could put this in a startup file or something, but I am a bit wary of mucking with signal handlers (even perl internal ones) across the whole system.

Anyways, thanks for any input.  My system info is below.

Jonathan Field
zappos.com

PS - The searchable mailing list archive URL that goes out in the inital subscription email is no longer valid: http://mathforum.org/epigone/modperl
I tried some usenet searches but couldn't find anything.

---
System Info
---

Apache Startup:

[Sat Apr 1 14:03:40 2006] [notice] Apache/1.3.33 (Unix) mod_perl/1.29 mod_ssl/2.8.24 OpenSSL/0.9.7e configured -- resuming normal operations


[EMAIL PROTECTED]: .../JF]$ uname -a
Linux dev1 2.6.11.4-20a-smp #1 SMP Wed Mar 23 21:52:37 UTC 2005 i686 i686 i386 GNU/Linux


[EMAIL PROTECTED]: .../JF]$ perl -V
Summary of my perl5 (revision 5 version 8 subversion 6) configuration:
  Platform:
    osname=linux, osvers=2.6.9, archname=i586-linux-thread-multi
uname='linux salieri 2.6.9 #1 smp fri jan 14 15:41:33 utc 2005 i686 athlon i386 gnulinux ' config_args='-ds -e -Dprefix=/usr -Dvendorprefix=/usr -Dinstallusrbinperl -Dusethreads -Di_db -Di_dbm -Di_ndbm -Di_gdbm -Duseshrplib=true -Doptimize=-O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -g -Wall -pipe'
    hint=recommended, useposix=true, d_sigaction=define
usethreads=define use5005threads=undef useithreads=define usemultiplicity=define
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -pipe -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -march=i586 -mcpu=i686 -fmessage-length=0 -Wall -g -Wall -pipe', cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBUGGING -fno-strict-aliasing -pipe' ccversion='', gccversion='3.3.5 20050117 (prerelease) (SUSE Linux)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='cc', ldflags =''
    libpth=/lib /usr/lib /usr/local/lib
    libs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    perllibs=-lnsl -ldl -lm -lcrypt -lutil -lpthread -lc
    libc=, so=so, useshrplib=true, libperl=libperl.so
    gnulibc_version='2.3.4'
  Dynamic Linking:
dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.6/i586-linux-thread-multi/CORE'
    cccdlflags='-fPIC', lddlflags='-shared'


Characteristics of this binary (from libperl):
Compile-time options: DEBUGGING MULTIPLICITY USE_ITHREADS USE_LARGE_FILES PERL_IMPLICIT_CONTEXT
  Built under linux
  Compiled at Mar 19 2005 17:34:48
  @INC:
    /usr/lib/perl5/5.8.6/i586-linux-thread-multi
    /usr/lib/perl5/5.8.6
    /usr/lib/perl5/site_perl/5.8.6/i586-linux-thread-multi
    /usr/lib/perl5/site_perl/5.8.6
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.6/i586-linux-thread-multi
    /usr/lib/perl5/vendor_perl/5.8.6
    /usr/lib/perl5/vendor_perl

Reply via email to