This looks really useful. Thanks for writing it. I'm trying to import
some existing python modules that have logging calls into a web2py
app.  Just putting log.py into my models directory helps some, but I'm
not seeing any messages from my existing modules with level lower than
logging.ERROR. I am, however, getting lower level (down to
logging.DEBUG) from the web2py framework.  I suspect it has something
to do with the customized logger my modules are using.  I don't want
to go through and comment out all the calls to my version of getLogger
() because many of these modules are used by other code.  I'm
wondering if there's a way for a python module to detect at runtime
whether it's being imported from the web2py framework. I might then be
able to make my customized logging setup do nothing when running under
web2py.  Any suggestions?

Thanks,
Mike Ellus

On Jun 25, 8:29 am, Hans <johann.scheibelho...@easytouch-edv.com>
wrote:
> Richard,
>
> the following solution works for me in production without any
> problems. I use it for periodic, unattended functions (cron). I've
> send Massimo the code in case he wants to include it into  web2py or
> make it available as optional add-on download.
>
> Hans
>
> '''
> To use the per application log file with rotating file handler in
> web2py you need to put this file (log.py) into your models folder. The
> log
> file itself is created in your_web2py_path/applications/
> your_application/app.log
>
> Writing into the log file from your controller works as follows:
> def my_function():
>    logging.debug('my function abc is starting')
>    logging.error('huston we got a %s problem.' % 'major')
>     return
>
> Viewing the log file through your application works as follows:
> def show_log():
>     return get_log()
>
> If required the GAE solution needs work.
> A BIG thank you to Iceberg!
> Feedback and usage is welcome ;-)
>
> Important note: do *not* 'importlogging' in your controller if you
> use log.py. its done for all your controllers already in the log.py
> model and it would break the log.py magic.
> '''
>
> importlogging
>
> def _init_log(level=logging.DEBUG,formatter="%(asctime)s %(levelname)s
> %(funcName)s():%(lineno)d %(message)
> s",filename='app.log',maxBytes=1024*1024,backupCount=2):
>     import os,logging.handlers
>     logger=logging.getLogger(request.application)
>     logger.setLevel(level)
>     if request.env.web2py_runtime_gae: # if running on Google App
> Engine
>         handler=logging.handlers.HTTPHandler(request.env.http_host,URL
> (r=request,f='log')) # assuming there is an optional log action
>     else:
>         handler=logging.handlers.RotatingFileHandler(os.path.join
> (request.folder,filename),maxBytes=maxBytes,backupCount=backupCount)
>     handler.setLevel(level)
>     handler.setFormatter(logging.Formatter(formatter))
>     logger.addHandler(handler)
>     logger.debug("web2py application %s starting" %
> request.application)
>     return logger
>
> def get_log():
>     try:
>         f = open(logging.handlers[0].baseFilename, 'r')
>         c = f.readlines()
>         f.close()
>         return {'log':TABLE(*[TR(str(item)) for item in c])}
>     except:
>         return ()
>
> logging=cache.ram('mylog',lambda:_init_log(),time_expire=99999999)

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"web2py Web Framework" group.
To post to this group, send email to web2py@googlegroups.com
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to