Python logger,打印不带父nam的子logger%(name)

2024-04-25 20:26:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试Python日志记录。在

因为我想让一些记录器共享一个格式化程序,所以我使用如下代码所示的日志层次结构。在

如您所见,格式是'%(asctime)s - %(name)s - %(message)s'

此时,我希望日志记录器打印不带父名称的%(name)s部分。在

我的意思是,通常它会把名字打印成'SYS.Start Up Routine',但我想要'Start Up Routine'

有什么办法吗?在

logging.root.level = logging.DEBUG
logger = logging.getLogger('SYS')
logger.setLevel(logging.DEBUG)

formatter = logging.Formatter('%(asctime)s - %(name)s - %(message)s')

streamHandler = logging.StreamHandler()
streamHandler.setFormatter(formatter)
logger.addHandler(streamHandler)

logger1 = logging.getLogger("SYS.Start Up Routine")
logger2 = logging.getLogger("SYS.Message Layer")
logger3 = logging.getLogger("SYS.Application Layer")

Tags: namedebuglayermessageformatterloggingsyslogger
2条回答

如果你想让名字说“bar”而不是'美食酒吧,只需记录到名为'bar'的记录器,并将处理程序添加到根记录器。在

在示例中添加上下文筛选器:

class ContextFilter:
    def filter(self, record):
        split_name = record.name.split('.', 1)
        if split_name[0] = 'SYS':
            record.name = split_name[1]

然后将其添加到处理程序:

^{pr2}$

处理程序筛选器是logging flow的最后一部分。此过滤器会在此时更改名称。这允许您使用SYS作为所有日志记录器的根目录(这是一个很好的实践),并允许最终用户决定格式化。在这里,您是自己日志的使用者,您只想打印到stdout,但情况并非总是这样。在

您可以添加一个文件处理程序,将其设置为debug,而不添加上下文过滤器,这样它就包含SYS,因为现在它包含了一大堆其他的记录器,而且根很重要。在

相关问题 更多 >