You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
logging.LogRecord should know how to handle dict-like args #46725
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
GitHub fields:
assignee='https://github.com/vsajip'closed_at=<Date2008-03-29.20:14:26.106>created_at=<Date2008-03-24.13:56:05.847>labels= ['invalid', 'type-feature', 'library']
title='logging.LogRecord should know how to handle dict-like args'updated_at=<Date2008-03-29.20:14:26.098>user='https://bugs.python.org/wcmaier'
In (at least) Python 2.5.2, logging.logRecord provides a very useful
facility to interpolate formatted strings. This feature expands an *args
sequence; if that sequence has only one element and that element is a
dictionary, LogRecord uses the dictionary to interpolate keyword
formatted strings. This is incredibly useful, but the LogRecord
__init__() method includes a rather arbitrary type-specific check that
prevents users from passing dict-like objects to the log methods:
logging.__init__.py:204..238
class LogRecord:
[...]
def __init__(self, name, level, pathname, lineno,
msg, args, exc_info, func=None):
[...]
if args and (len(args) == 1) and args[0] and (type(args[0]) ==
types.DictType):
args = args[0]
This restriction prevents the user from passing eg a subclass of
UserDict.DictMixin. Now, __init__() clearly does need to do _some_
checking of args, but it would be nice if that checking accepted
dict-like objects. I haven't come up with a good way to do this myself
yet, but I figured I'd submit the request now.
Activity
wcmaier commentedon Mar 24, 2008
In (at least) Python 2.5.2, logging.logRecord provides a very useful
facility to interpolate formatted strings. This feature expands an *args
sequence; if that sequence has only one element and that element is a
dictionary, LogRecord uses the dictionary to interpolate keyword
formatted strings. This is incredibly useful, but the LogRecord
__init__() method includes a rather arbitrary type-specific check that
prevents users from passing dict-like objects to the log methods:
logging.__init__.py:204..238
class LogRecord:
[...]
def __init__(self, name, level, pathname, lineno,
msg, args, exc_info, func=None):
[...]
if args and (len(args) == 1) and args[0] and (type(args[0]) ==
types.DictType):
args = args[0]
This restriction prevents the user from passing eg a subclass of
UserDict.DictMixin. Now, __init__() clearly does need to do _some_
checking of args, but it would be nice if that checking accepted
dict-like objects. I haven't come up with a good way to do this myself
yet, but I figured I'd submit the request now.
Thanks!
vsajip commentedon Mar 29, 2008
You don't need to change the logging package for this. Simply generate a
bona-fide dict from your UserDict or DictMixin subclass as follows:
and pass that into the logging call instead of userDict_or_mixIn_instance.