如何替换python日志函数中的行号
我在所有django视图的末尾调用了一个方法来记录日志如何替换python日志函数中的行号,python,django,logging,Python,Django,Logging,我在所有django视图的末尾调用了一个方法来记录日志 logger = logging.getLogger(__name__) def context_logger(context, request): for key, val in context.items(): if key is not 'page_form' and key is not 'failure_form': logger.debug('%s - context for %
logger = logging.getLogger(__name__)
def context_logger(context, request):
for key, val in context.items():
if key is not 'page_form' and key is not 'failure_form':
logger.debug('%s - context for %s: %s', request.get_full_path(), key, val)
logger.debug(sys._getframe().f_lineno)
观点
问题是,当调用context_logger时,它总是在日志中打印context_logger方法的行号(而不是调用它的位置)
我能抓住电话线
但不确定如何在日志中替换此项
有没有直截了当的方法
如果我这样做(sys.\u getframe().f\u lineno)=实际的行数
我得到这个错误:
ValueError: f_lineno can only be set by a line trace function
我对这个问题也很感兴趣,不幸的是这似乎是不可能的。在设置日志记录时,python记录器接受dict
extra
,以向该记录添加信息(请参见Lib/logging/\uuuu init\uuuu.py
)。不幸的是,诸如.info(msg)
之类的记录器方法不接受类似的选项,更改行号将引发异常,因为键已经存在(请参见Lib/logging/\uuuuuuuu init.py 1252 ff
):
我很好奇是否有人有想法,为什么开发人员不允许操纵记录器(如果这是一个目的或不够重要)。也许更直接的问题是,django设置从何处获得%(lineno)?我如何重写这个值,最终这就是我要做的。将这个函数转换成django日志过滤器会更好吗?
(sys._getframe().f_lineno)
ValueError: f_lineno can only be set by a line trace function
rv = LogRecord(name, level, fn, lno, msg, args, exc_info, func)
if extra is not None:
for key in extra:
if (key in ["message", "asctime"]) or (key in rv.__dict__):
raise KeyError("Attempt to overwrite %r in LogRecord" % key)
rv.__dict__[key] = extra[key]