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 -~----------~----~----~----~------~----~------~--~---