[Python-Dev] Re: PEP 282 comments (original) (raw)
Trent Mick trentm@ActiveState.com
Thu, 21 Mar 2002 02:35:58 -0800
- Previous message: [Python-Dev] Re: PEP 282 comments
- Next message: [Python-Dev] Re: PEP 282 comments
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
[Vinay Sajip wrote]
[Trent] > Here is why I really like this idea now. As per usual, any log message > call has the 'msg, *args' arguments. But, in addition, arbitrary objects > can be passed in as keyword arguments. These objects get slapped into the > LogRecord's dict and any subsequent Handler and/or Formatter can work > with those objects. For example, if I want to log some arbitrarily > complex object I can just add it to the log record. On the handling end, > I could have a Formatter that knows how to deal with that object. For > formatters that don't recognize certain objects, a reasonable default > like using the pprint module could be used.
I like this. I prefer the name "excinfo" (rather than "exc") for the key, as it is clearer that the result of sys.excinfo(), or equivalent, is being passed.
Agreed. I prefer 'exc_info' too.
How about the following? The kwargs is searched for "excinfo", and if found it is copied to the LogRecord [and removed from kwargs]. The kwargs dict is then bound to a "userinfo" attribute of the LogRecord.
There is a potential minefield here - if we are allowing any logging record to be sent by wire to a remote logger, then the "userinfo" needs to go too - and what if something in it can't be pickled? Given that it is really important that the logging system is silent except when explicitly asked to do something by a logging call, exceptions caught in the logging system are generally ignored by design. This means that pickling exceptions would not be raised, and I foresee difficulties for developers... The idea of allowing arbitrary objects into the LogRecord is very powerful and has much to commend it, but I think the pickling problem may need to be solved first.
What do you think?
How about pulling out exc_info above, as you described, and then just dumping the rest of the keyword args. No user_info, no mine field. If we come up with a "mine sweeper" later then we can decide to pass on other keywords if it looks reasonable and useful. So effectivly we are just trying to express:
def log(self, level, msg, *args, exc_info=None): ...
but have to use:
def log(self, level, msg, *args, **kwargs): ...
# dump anything but kwargs["exc_info"]
because the former is a syntax problem.
Thoughts?
Trent
p.s. Vinaj, when do you sleep? :)
-- Trent Mick TrentM@ActiveState.com
- Previous message: [Python-Dev] Re: PEP 282 comments
- Next message: [Python-Dev] Re: PEP 282 comments
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]