[mod_python] mod_python debug level message not logged

Annie Wang aw1179 at yahoo.com
Mon Nov 17 19:36:30 EST 2008


Hello,

I'm using Apache/2.2.8 (Unix),  mod_python/3.3.1, Python/2.5.2 and very new to mod_python.  I'm trying to get the logging working for debug and info level in mod_python. Here's the log.py and log is global object that used by the rest of our application to do logging.

log = None

import logging

class StdLogger:
    """ Simple class delegating logging calls to the standard logging module."""
    def debug(self,msg):
        logging.debug(msg)

    def info(self,msg):
        logging.info(msg)

    def warn(self,msg):
        logging.warn(msg)
    
    def error(self,msg):
        logging.error(msg)

try:
    # Configure production logging.
    import mod_python
    from mod_python import apache
    
    class ProdLogger:
        """
        Logger class simulating the standard logging API's Logger but
        funneling messages through mod_python to the Apache log.
    
        TODO: It looks like our calls to log_error below only make
        it to the apache error log when severity is warn.  We need to
        figure out how to better connect this code to the combination of
        apache/mod_python/web.py we're running.
        """
    
        def debug(self,msg):
            apache.log_error(msg,apache.APLOG_DEBUG)
    
        def info(self,msg):
            apache.log_error(msg,apache.APLOG_INFO)
    
        def warn(self,msg):
            apache.log_error(msg,apache.APLOG_WARNING)
        
        def error(self,msg):
            apache.log_error(msg,apache.APLOG_ERR)

    log = ProdLogger()
except:
    log = StdLogger()


I read the mod_python manual and know that if there is a reference to the request object, I should use req.log_error, but in my case, the request object is not available, so I have to use the apache.log_error.  However, the manual also said that I need to specify the server parameter in order to be able to log debug and info level messages to the error_log or better yet to its own separate log file.  The server object can be obtained from the request object but I don't have access to the request object.   I searched thru the web and found the following code and tried it out but with no luck:
 
frommod_pythonimportapache
importlogging

classApacheLogHandler(logging.Handler):
"""A handler class which sends all logging to Apache."""

def__init__(self,level=logging.NOTSET):
logging.Handler.__init__(self,level)

"""Map logging levels to Apache codes."""
self.level_mapping={}
self.level_mapping[logging.ERROR]=apache.APLOG_ERR
self.level_mapping[logging.WARNING]=apache.APLOG_WARNING
self.level_mapping[logging.INFO]=apache.APLOG_INFO
self.level_mapping[logging.DEBUG]=apache.APLOG_DEBUG

defapache_level(self,record):
"""Map current record's logging level to Apache code."""
try:
ifrecord.levelno:
returnself.level_mapping[record.levelno]
else:
returnself.level_mapping[self.level]
except(AttributeError,KeyError):
returnapache.APLOG_ERR

defemit(self,record):
level=self.apache_level(record)
"""
        Set MODPYTHON mp_server object so that vhost logs to its own error_log.
        """
try:
server=record.__dict__['server']
apache.log_error(record.getMessage(),level,server)
exceptKeyError:
apache.log_error(record.getMessage(),level)

I think my problem is record.__dict__['server'] raised an exception and
it is just calling apache.log_error(record.getMessage(), level) without
the server parameter so only warn/error messages made it to the
error_log. So my question is, how do I get a hold of this server object
other than from the request object ? how do I configure the httpd.conf
to get this working. Here's a snipplets of the httpd.conf regarding
logging:

# =================================================
# Logs
# =================================================
LogLevel debug
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
ErrorLog /opt/app/logs/error_log
CustomLog /opt/app/logs/access_log combined
CustomLog logs/ssl_request_log \
"%t %h %{HTTPS}x %{SSL_PROTOCOL}x %{SSL_CIPHER}x \
%{SSL_CIPHER_USEKEYSIZE}x %{SSL_CLIENT_VERIFY}x \"%r\" %b"

Thanks advance for any suggestions and help I can get.
Annie


      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mm_cfg_has_not_been_edited_to_set_host_domains/pipermail/mod_python/attachments/20081117/3ebaea7f/attachment-0001.html


More information about the Mod_python mailing list