[mod_python] Problems with logging.

Graham Dumpleton graham.dumpleton at gmail.com
Tue Nov 6 19:50:58 EST 2007


On 07/11/2007, Graham Dumpleton <graham.dumpleton at gmail.com> wrote:
> On 07/11/2007, Graham Dumpleton <graham.dumpleton at gmail.com> wrote:
> > On 07/11/2007, Kathryn Van Stone <kvs at acm.org> wrote:
> > >
> > > I am currently using mod_python version 3.3.1 with Apache 2.2.4 (and
> > > Python 2.5.1).  I've notice a difference between using
> > > apache.log_error and req.log_error. I modified mptest.py to the
> > > following:
> > >
> > > from mod_python import apache
> > >
> > > def handler(req):
> > >      apache.log_error('Test log from apache', apache.APLOG_DEBUG)
> > >      req.log_error('Test log from request', apache.APLOG_DEBUG)
> > >      req.content_type = 'text/plain'
> > >      req.write('Hello World')
> > >      return apache.OK
> > >
> > >
> > > I modified the apache configuration to set the log level to debug.  I
> > > get the request log message, but not the apache log message. When the
> > > log level is raised to APLOG_NOTICE, I get both messages.
> >
> > Known issue, or at least I knew about it. I can't see that I created
> > an issue for it in the bug tracker though. I also can't remember the
> > full details at the moment. I know I made sure I didn't make the same
> > mistake in mod_wsgi though. :-)
> >
> > > Any thoughts on why there is a difference?  We have areas where
> > > getting the request object is a hassle and would like to use
> > > apache.log_error. (Also there are members of my team who don't like
> > > the 'requestobject.c(823)' showing up in the log as it adds almost no
> > > information)
> >
> > That requestobject.c always show for DEBUG level statements is a
> > result of how Apache works, in that it in embeds the C code file/line
> > number of where ap_log_rerror() is called. It is non trivial and
> > perhaps not entirely reliable, to try and dynamically work out where
> > in the Python code the call to the Python wrapper for the function was
> > called. It may be possible to fudge things at the level of the call to
> > ap_log_rerror() and not pass APLOG_MARK as argument and split it out
> > into two separate zero arguments. Presume that ap_log_rerror() will
> > not crash if line information not supplied.
>
> Quick one as bit rushed right now.
>
> Use:
>
>   from mod_python import apache
>   apache.main_server.log_error(......)
>
> for now.
>
> This should mean values of LogLevel will be honoured.
>
> I remember what the issues were now, but no time to go in to it.

Hmmm, had a chance to look at the code now and the issue I was
thinking of was fixed in mod_python 3.3.1.

The only thing I can think of now is that you are putting LogLevel
directive within a specific VirtualHost container, whereas
apache.log_error() and apache.main_server.log_error() are associated
with the global Apache configuration and would only pay attention to
LogLevel defined outside of all VirtualHost containers.

Graham


More information about the Mod_python mailing list