是否可以装饰/扩展python标准日志记录系统,以便在调用日志记录方法时,它还会记录文件和调用它的行号,或者调用它的方法?
当然,检查记录文档中的格式化程序.特别是lineno和pathname变量.
%(pathname)s 发出日志记录调用的源文件的完整路径名(如果可用).
%(filename)s 路径名的文件名部分.
%(模块)s 模块(文件名的名称部分).
%(funcName)s 包含日志记录调用的函数的名称.
%(lineno)d 发出日志记录调用的源行号(如果可用).
看起来像这样:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
除了Seb非常有用的答案之外,这里还有一个方便的代码片段,它以合理的格式演示了记录器的使用情况:
#!/usr/bin/env python import logging logging.basicConfig(format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s', datefmt='%Y-%m-%d:%H:%M:%S', level=logging.DEBUG) logger = logging.getLogger(__name__) logger.debug("This is a debug log") logger.info("This is an info log") logger.critical("This is critical") logger.error("An error occurred")
生成此输出:
2017-06-06:17:07:02,158 DEBUG [log.py:11] This is a debug log 2017-06-06:17:07:02,158 INFO [log.py:12] This is an info log 2017-06-06:17:07:02,158 CRITICAL [log.py:13] This is critical 2017-06-06:17:07:02,158 ERROR [log.py:14] An error occurred