I am glad you like it. So every new app will have a models/log.py
soon?

BTW, I personally prefer this formatter, hope you do:
  "%(asctime)s %(levelname)s %(funcName)s():%(lineno)d %(message)s"

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.
>
> > On Jun9, 10:35pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > I agree about 1 and 2. I do not thing logging belongs to cache either.
>
> > > i think we want something like
>
> > >    request.log(message)
>
> > > which does something like.
>
> > >    open(os.path.join(request.folder,'app.log'),'w').write(message
> > > +'\n')
>
> > > Am I wrong? The problem is that this naive approach would bypass OS
> > > logging and filtering capabilities supported by logging. we should
> > > look into the logging module perhaps we can have a logger per app?
>
> > > Massimo
>
> > > On Jun 9, 8:32 am, Hans <johann.scheibelho...@easytouch-edv.com>
> > > wrote:
>
> > > > Sorry for being picky on this. I think the database is not a suitable
> > > > place either to store a 'application instance initialized flag'.
> > > > Reason:
> > > > 1) the db can be used by more than one instance of the app
> > > > 2) if the app stops execution without setting back the 'db record' to
> > > > 'app not initialized' - like it happens when you remove the power -
> > > > then the application will not work any more because the code will
> > > > refer to objects which are not created yet because the one-time-
> > > > initialization per app was not executed.
>
> > > > I'm not aware how application wide vars in web2py cache are working,
> > > > but I assume it could be a viable option.
>
> > > > what do you think?
>
> > > > On Jun 8, 2:43 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > You are right. Not in session. You can store an application wide var
> > > > > in cache but I would suggest using the db for this. Anyway, I will
> > > > > post an example.
>
> > > > > On Jun 8, 4:27 am, Hans <johann.scheibelho...@easytouch-edv.com>
> > > > > wrote:
>
> > > > > > The log file initialization code must be executed once when the
> > > > > > application starts and should not be executed multiple times (e.g. 
> > > > > > not
> > > > > > once per user and not once per controller execution).
>
> > > > > > I'm not aware that in a session I can store a application-wide 
> > > > > > global
> > > > > > variable - independent of the user.
>
> > > > > > Can you provide a link or example code for execution only once per
> > > > > > application (e.g. initialization function) ?
>
> > > > > > On Jun 5, 10:19 pm, mdipierro <mdipie...@cs.depaul.edu> wrote:
>
> > > > > > > can you store it into a session?
>
> > > > > > > On Jun 5, 2:11 pm, Hans <johann.scheibelho...@easytouch-edv.com>
> > > > > > > wrote:
>
> > > > > > > > The problem I have with my code for generating log files that 
> > > > > > > > the part
> > > > > > > > of the code (see first posting in this thread) which is outside 
> > > > > > > > any
> > > > > > > > function in the controller (because it should be available for 
> > > > > > > > all
> > > > > > > > functions in this controller) is executed every time a function 
> > > > > > > > is
> > > > > > > > called. I have not found a way to execute it only once 
> > > > > > > > intitially and
> > > > > > > > prevent multiple executions. Hence it registeres log handlers 
> > > > > > > > every
> > > > > > > > time the controller is executed which causes every log line to 
> > > > > > > > be
> > > > > > > > written multiple times into the log file.
>
> > > > > > > > The following did not work:
>
> > > > > > > > try:
> > > > > > > >     done_once
> > > > > > > > except:
> > > > > > > >     place code to be executed only once here
> > > > > > > >     global done_once
> > > > > > > >     done_once=true
>
> > > > > > > > because the variable done_once is undefined each time the 
> > > > > > > > controller
> > > > > > > > is executed again.
>
> > > > > > > > How can a code in the controller be executed only once?
> > > > > > > > Also completely different approach suggestions are welcome!
>
> > > > > > > > Thanks,
> > > > > > > > Hans
--~--~---------~--~----~------------~-------~--~----~
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