如果你想要在日志中包含函数的全路径,包括函数名,你可以在日志记录时使用 __name__
和 __qualname__
属性,这些属性包含了函数所在的模块和完整的类/函数路径。
以下是一个简单的例子,演示了如何在配置文件中设置:
import logging.config
LOGGING_CONFIG = {
'version': 1,
'formatters': {
'detailed': {
'class': 'logging.Formatter',
'format': '%(asctime)s [%(levelname)s] %(name)s.%(funcName)s:%(lineno)d - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'detailed',
},
},
'root': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
logging.config.dictConfig(LOGGING_CONFIG)
def my_function():
logging.getLogger(__name__).info("This log message includes function path.")
if __name__ == '__main__':
my_function()
在这个例子中,LOGGING_CONFIG
字典包含了一个简单的配置,其中包括了一个自定义的格式化器 'detailed'
,它使用了 %(name)s
、%(funcName)s
和 %(lineno)d
等占位符。这些占位符会被替换为相应的日志记录信息。在 my_function
函数中,通过 logging.getLogger(__name__)
获取 logger,并记录了一条包含函数路径的日志。
你可以根据实际需求调整日志配置和格式化器,以满足你的需求。
如果你的 Python 版本较新,通常会使用 dictConfig
来配置日志,而不再使用 fileConfig
。我之前提到的 LOGGING_CONFIG
是一个字典配置,你可以通过 dictConfig
函数将其应用到 logging 模块。
以下是一个更详细的例子:
import logging.config
LOGGING_CONFIG = {
'version': 1,
'formatters': {
'detailed': {
'class': 'logging.Formatter',
'format': '%(asctime)s [%(levelname)s] %(name)s.%(funcName)s:%(lineno)d - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG',
'formatter': 'detailed',
},
},
'root': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
logging.config.dictConfig(LOGGING_CONFIG)
def my_function():
logging.getLogger(__name__).info("This log message includes function path.")
if __name__ == '__main__':
my_function()
在这个例子中,LOGGING_CONFIG
是一个包含日志配置的字典。通过 dictConfig
函数将这个配置应用到 logging 模块。这样,在 my_function
函数中的日志记录就会包含函数的全路径信息。