I ended-up embedding my code into web2py instead of injecting it - it's 
simpler this way (for me) - it looks like this:

*In logging.conf:*

[loggers]
keys=root,rocket,markdown,web2py,rewrite,app,welcome,*logstash*

[handlers]
keys=consoleHandler,rotatingFileHandler,*logstash*

...

*[logger_logstash]
level=DEBUG
handlers=logstash
qualname=logstash
propagate=0
*
...

*[handler_logstash]
class=handlers.TimedRotatingFileHandler
level=DEBUG
args=("<my_log_file>", "midnight")*


*In gluon.main.py:*

# set up logging for subsequent imports
import logging
import logging.config
logpath = abspath("logging.conf")
if os.path.exists(logpath):
    logging.config.fileConfig(abspath("logging.conf"))
else:
    logging.basicConfig()
logger = logging.getLogger("web2py")

import gluon.contrib.logstash as logstash
import logstash_formatter
logstash_logger = logging.getLogger('logstash')
logstash_logger.handlers[0].setFormatter(logstash_formatter.
LogstashFormatter())

from restricted import RestrictedError
from http import HTTP, redirect
from globals import Request, Response, Session
from compileapp import build_environment, run_models_in, \
    run_controller_in, run_view_in
from fileutils import copystream
from contenttype import contenttype
from sql import BaseAdapter
from settings import global_settings
from validators import CRYPT
from cache import Cache
from html import URL as Url
from storage import List
import newcron
import rewrite

...

def serve_controller(request, response, session):
...

    # also, make sure the flash is passed through
    # ##################################################
    # process models, controller and view (if required)
    # ##################################################

    run_models_in(environment)
    response._view_environment = copy.copy(environment)
    page = run_controller_in(request.controller, request.function,environment
)
    if isinstance(page, dict):
        response._vars = page
        for key in page:
            response._view_environment[key] = page[key]
        run_view_in(response._view_environment)
        page = response.body.getvalue()

    logstash.log(request, response, session, logstash_logger)

    raise HTTP(response.status, page, **response.headers)

*In gluon.contrib.logstash.py:*

import simplejson

def getBody(obj):
    body = None
    try:
        body = obj.getvalue()
    except:
        try:
            body = obj.read()
        except:
            pass

    return body

def log(request, response, session, logger):
    user = ''
    sessionDict = dict(session)
    if sessionDict.has_key('auth') and sessionDict['auth']:
        authDict = dict(sessionDict['auth'])
        if authDict.has_key('user') and authDict['user']:
            userDict = dict(authDict['user'])
            if userDict.has_key('first_name') and userDict.has_key(
'last_name'):
                user = userDict['first_name'] + ' ' + userDict['last_name']

    message = {
        '@user': user,
        '@controller': request.controller,
        '@function': request.function,
        '@args': request.args,
        '@vars': dict(request.vars),
        '@requestBody': getBody(request.body),
        '@responseBody': getBody(response.body)
    }

    logMessage = simplejson.dumps(message)
    logger.debug(logMessage)



Any suggestions?

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to