我在我的应用程序中使用Python日志记录模块。这是我目前的格式。
LOGGER_FORMAT = '%(asctime)s %(levelname)-5s [%(threadName)-10s] %(name)s.%(module)s.%(funcName)s : %(message)s'
logging.basicConfig(level=logging.INFO, format=LOGGER_FORMAT)
示例输出:
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.util.get_login_info : Log line 1
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.cache.call : Log line 2
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.web.parse_response : Log line 3
我正在寻找的是我从固定位置显示消息而不是改变起点。
我可以为每个单独的属性配置固定长度,但我想为整个name.module.funcName
部分配置固定长度,以便我的输出如下所示:
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.util.get_login_info : Log line 1
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.cache.call : Log line 2
2018-03-14 11:35:27,257 INFO [Thread-2 ] my_app.web.parse_response : Log line 3
是否可以,我该如何配置?
答案 0 :(得分:0)
您最好的选择是使用logging.Filter
,例如:
class MyFilter(logging.Filter):
def filter(self, record):
record.expandedFuncName = '%s.%s.%s' % (record.name, record.module, record.funcName)
return True
然后使用类似
的格式字符串%(asctime)s %(levelname)-5s [%(threadName)-10s] %(expandedFuncName)-20.20s : %(message)s
您需要确保将此过滤器的实例应用于在格式字符串中使用格式化程序expandedFuncName
的每个处理程序。您无法使用basicConfig
执行此操作,因此我建议您使用dictConfig
日志记录配置API。
请注意,如果您使用日志文档中建议的约定logger = logging.getLogger(__name__)
,则记录器名称通常会包含模块名称,但这不适用于__main__
模块的情况。