Skip to content

Commit 6451d26

Browse files
committed
logging: Support extra context for LogRecord.
Extra context is usable to enrich log record with concrete context additions. Signed-off-by: Alon Bar-Lev <[email protected]>
1 parent 68e0dfc commit 6451d26

File tree

1 file changed

+35
-31
lines changed

1 file changed

+35
-31
lines changed

python-stdlib/logging/logging.py

+35-31
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,19 @@
2828

2929

3030
class LogRecord:
31-
def set(self, name, level, message):
31+
def __init__(self, name, level, message, extra=None):
3232
self.name = name
3333
self.levelno = level
3434
self.levelname = _level_dict[level]
3535
self.message = message
3636
self.ct = time.time()
3737
self.msecs = int((self.ct - int(self.ct)) * 1000)
3838
self.asctime = None
39+
if extra is not None:
40+
for key in extra:
41+
if (key in ["message", "asctime"]) or (key in self.__dict__):
42+
raise KeyError("Attempt to overwrite %r in LogRecord" % key)
43+
setattr(self, key, extra[key])
3944

4045

4146
class Handler:
@@ -110,7 +115,6 @@ def __init__(self, name, level=NOTSET):
110115
self.name = name
111116
self.level = level
112117
self.handlers = []
113-
self.record = LogRecord()
114118

115119
def setLevel(self, level):
116120
self.level = level
@@ -121,36 +125,36 @@ def isEnabledFor(self, level):
121125
def getEffectiveLevel(self):
122126
return self.level or getLogger().level or _DEFAULT_LEVEL
123127

124-
def log(self, level, msg, *args):
128+
def log(self, level, msg, *args, extra=None):
125129
if self.isEnabledFor(level):
126130
if args:
127131
if isinstance(args[0], dict):
128132
args = args[0]
129133
msg = msg % args
130-
self.record.set(self.name, level, msg)
134+
record = LogRecord(self.name, level, msg, extra)
131135
handlers = self.handlers
132136
if not handlers:
133137
handlers = getLogger().handlers
134138
for h in handlers:
135-
h.emit(self.record)
139+
h.emit(record)
136140

137-
def debug(self, msg, *args):
138-
self.log(DEBUG, msg, *args)
141+
def debug(self, msg, *args, **kwargs):
142+
self.log(DEBUG, msg, *args, **kwargs)
139143

140-
def info(self, msg, *args):
141-
self.log(INFO, msg, *args)
144+
def info(self, msg, *args, **kwargs):
145+
self.log(INFO, msg, *args, **kwargs)
142146

143-
def warning(self, msg, *args):
144-
self.log(WARNING, msg, *args)
147+
def warning(self, msg, *args, **kwargs):
148+
self.log(WARNING, msg, *args, **kwargs)
145149

146-
def error(self, msg, *args):
147-
self.log(ERROR, msg, *args)
150+
def error(self, msg, *args, **kwargs):
151+
self.log(ERROR, msg, *args, **kwargs)
148152

149-
def critical(self, msg, *args):
150-
self.log(CRITICAL, msg, *args)
153+
def critical(self, msg, *args, **kwargs):
154+
self.log(CRITICAL, msg, *args, **kwargs)
151155

152-
def exception(self, msg, *args, exc_info=True):
153-
self.log(ERROR, msg, *args)
156+
def exception(self, msg, *args, exc_info=True, **kwargs):
157+
self.log(ERROR, msg, *args, **kwargs)
154158
tb = None
155159
if isinstance(exc_info, BaseException):
156160
tb = exc_info
@@ -178,32 +182,32 @@ def getLogger(name=None):
178182
return _loggers[name]
179183

180184

181-
def log(level, msg, *args):
182-
getLogger().log(level, msg, *args)
185+
def log(level, msg, *args, **kwargs):
186+
getLogger().log(level, msg, *args, **kwarg)
183187

184188

185-
def debug(msg, *args):
186-
getLogger().debug(msg, *args)
189+
def debug(msg, *args, **kwargs):
190+
getLogger().debug(msg, *args, **kwargs)
187191

188192

189-
def info(msg, *args):
190-
getLogger().info(msg, *args)
193+
def info(msg, *args, **kwargs):
194+
getLogger().info(msg, *args, **kwargs)
191195

192196

193-
def warning(msg, *args):
194-
getLogger().warning(msg, *args)
197+
def warning(msg, *args, **kwargs):
198+
getLogger().warning(msg, *args, **kwargs)
195199

196200

197-
def error(msg, *args):
198-
getLogger().error(msg, *args)
201+
def error(msg, *args, **kwargs):
202+
getLogger().error(msg, *args, **kwargs)
199203

200204

201-
def critical(msg, *args):
202-
getLogger().critical(msg, *args)
205+
def critical(msg, *args, **kwargs):
206+
getLogger().critical(msg, *args, **kwargs)
203207

204208

205-
def exception(msg, *args):
206-
getLogger().exception(msg, *args)
209+
def exception(msg, *args, **kwargs):
210+
getLogger().exception(msg, *args, *kwargs)
207211

208212

209213
def shutdown():

0 commit comments

Comments
 (0)