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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.