Why do you need to cache the logging module? Is this only for speed?
On Jun 10, 1:44 pm, Iceberg <iceb...@21cn.com> wrote:
> After changing from FileHandler to RotatingFileHandler, now I think
> the per-app log can be turned on by default (otherwise new comers
> won't notice this good feature).
>
> The only thing I am still not sure is whether one can use logging and
> its FileHander (or RotatingFileHander) on GAE's readonly filesystem.
> Tests are welcome.
>
> Anyway, this is my latest code. Maybe it can help you.
>
> import logging
> def _init_log(level=logging.DEBUG):
> 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,'app.log'),maxBytes=1024*1024,backupCount=2)
> handler.setLevel(level)
> handler.setFormatter(logging.Formatter(
> "%(asctime)s %(levelname)s %(funcName)s():%(lineno)d %(message)
> s"))
> logger.addHandler(handler)
> return logger
> logging=cache.ram('mylog',lambda:_init_log(),time_expire=99999999)
>
> OPTIONAL in controller:
>
> def log():
> if request.vars: # append
> history=cache.ram('log_in_cache',lambda:[],time_expire=99999999)
> history.append(request.vars)
> cache.ram('log_in_cache',lambda h=history:h,time_expire=0)#set
> else: # show
> return {'':TABLE(*[TR(item) for item in
> cache.ram('log_in_cache',lambda:None,time_expire=99999999)])}
>
> On Jun10, 5:52pm, Hans <johann.scheibelho...@easytouch-edv.com> wrote:
>
> > WOW Iceberg! That should also work well for me. Thanks for sharing
> > your solution idea! I'm going to try it later today.
> > And I agree the 'uncomment me if you need app-logging' approach in
> > combination with the per-application-log-file seems also to me the
> > best (backward compatible, flexible).
>
> > Since I'm going to implement that for me anyway I'll send my code when
> > its finised...in case you want to improve it and/or Massimo wants to
> > incorporate it in future web2py versions.
>
> > On Jun 9, 9:02 pm, Iceberg <iceb...@21cn.com> wrote:
>
> > > Mmm, even after this log.py goes into models/log.py, I think the line:
> > > logging=cache.ram(...)
> > > should be replaced by:
> > > import logging
> > > # logging=cache.ram(...) # Uncomment me if you need app-logging
>
> > > Because:
> > > 1. My log.py will cause the an incremental system.log which will
> > > eventually cram up your disk, hence it is not good for production
> > > site, unless you use RotatingFileHandler instead.
> > > 2. On GAE, you can not write to disk anyway, unless you use
> > > SMTPHandler or HTTPHandler etc.
>
> > > You get the idea. //shrug
>
> > > > On Jun10, 2:22am, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > I think you nailed it! I would change the file name so that it resides
> > > > > inside the applicaitons folder:
>
> > > > > handler=logging.FileHandler(os.path.join(request.folder,"system.log"))
>
> > > > > we could also add a line in the admin to peek the log (like with
> > > > > sql.log).
>
> > > > > On Jun 9, 12:18 pm, Iceberg <iceb...@21cn.com> wrote:
>
> > > > > > request.log(message) would be nice, but all the advantages of
> > > > > > standard
> > > > > > logging are too good to let go. So I came up with this little trick.
>
> > > > > > Add following codes inside model/log.py:
>
> > > > > > def _init_log():
> > > > > > import logging
> > > > > > logger=logging.getLogger(request.application)
> > > > > > logger.setLevel(logging.DEBUG)
> > > > > > handler=logging.FileHandler("%s.log"%request.application)
> > > > > > handler.setLevel(logging.DEBUG)
> > > > > > handler.setFormatter(logging.Formatter(
> > > > > > "%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)
> > > > > > s"))
> > > > > > logger.addHandler(handler)
> > > > > > return logger
> > > > > > logging=cache.ram('once',lambda:_init_log(),time_expire=99999999)
>
> > > > > > Then, in any of your controller, you can just do the usual:
> > > > > > logging.warn('blah blah')
> > > > > > The only tricky point is you can not do this inside your controller:
> > > > > > import logging
> > > > > > otherwise you lose the magic. ;-)
>
> > > > > > Besides, thanks for Hans for bringing up all the issue, which
> > > > > > inspires
> > > > > > me to find the solution (at least for me) for this problem haunting
> > > > > > me
> > > > > > for long time.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---