Commit 062d56b1 authored by Vinay Sajip's avatar Vinay Sajip

logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to...

logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to increase flexibility of LogRecord creation.
parent 7cd94b8a
...@@ -31,7 +31,8 @@ __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR', ...@@ -31,7 +31,8 @@ __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig', 'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig',
'captureWarnings', 'critical', 'debug', 'disable', 'error', 'captureWarnings', 'critical', 'debug', 'disable', 'error',
'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass', 'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass',
'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning'] 'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning',
'getLogRecordClass', 'setLogRecordClass']
try: try:
import codecs import codecs
...@@ -316,6 +317,25 @@ class LogRecord(object): ...@@ -316,6 +317,25 @@ class LogRecord(object):
msg = msg % self.args msg = msg % self.args
return msg return msg
#
# Determine which class to use when instantiating log records.
#
_logRecordClass = LogRecord
def setLogRecordClass(cls):
"""
Set the class to be used when instantiating a log record.
"""
global _logRecordClass
_logRecordClass = cls
def getLogRecordClass():
"""
Return the class to be used when instantiating a log record.
"""
return _logRecordClass
def makeLogRecord(dict): def makeLogRecord(dict):
""" """
Make a LogRecord whose attributes are defined by the specified dictionary, Make a LogRecord whose attributes are defined by the specified dictionary,
...@@ -323,7 +343,7 @@ def makeLogRecord(dict): ...@@ -323,7 +343,7 @@ def makeLogRecord(dict):
a socket connection (which is sent as a dictionary) into a LogRecord a socket connection (which is sent as a dictionary) into a LogRecord
instance. instance.
""" """
rv = LogRecord(None, None, "", 0, "", (), None, None) rv = _logRecordClass(None, None, "", 0, "", (), None, None)
rv.__dict__.update(dict) rv.__dict__.update(dict)
return rv return rv
...@@ -1183,7 +1203,7 @@ class Logger(Filterer): ...@@ -1183,7 +1203,7 @@ class Logger(Filterer):
A factory method which can be overridden in subclasses to create A factory method which can be overridden in subclasses to create
specialized LogRecords. specialized LogRecords.
""" """
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func) rv = _logRecordClass(name, level, fn, lno, msg, args, exc_info, func)
if extra is not None: if extra is not None:
for key in extra: for key in extra:
if (key in ["message", "asctime"]) or (key in rv.__dict__): if (key in ["message", "asctime"]) or (key in rv.__dict__):
......
...@@ -34,6 +34,9 @@ Core and Builtins ...@@ -34,6 +34,9 @@ Core and Builtins
Library Library
------- -------
- logging: Added _logRecordClass, getLogRecordClass, setLogRecordClass to
increase flexibility of LogRecord creation.
- Issue #5117: Case normalization was needed on ntpath.relpath(). And - Issue #5117: Case normalization was needed on ntpath.relpath(). And
fixed root directory issue on posixpath.relpath(). (Ported working fixes fixed root directory issue on posixpath.relpath(). (Ported working fixes
from ntpath) from ntpath)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment