Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何替换python日志函数中的行号_Python_Django_Logging - Fatal编程技术网

如何替换python日志函数中的行号

如何替换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 %

我在所有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 %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]