使用 root log python 分离本地记录器

Pra*_*shi 2 python logging

我正在 python 中使用日志记录模块。在我的main.py文件中,我使用两个记录器。

  1. 根记录器(从同一目录中的多个模块获取日志)
  2. 本地记录器(记录特定信息)

我希望 的信息local logger与 分开root logger。但是当我创建单独的记录器时。的信息local logger也存在于根记录器信息中。

这是我如何执行此操作的示例

# main.py
import logging

def setup_logger(filename, name = ''):
    if name == '':
        logging.basicConfig(filename=filename,
                            format='%(asctime)s %(funcName)s %(levelname)s %(message)s',
                            filemode='a')
        logger = logging.getLogger()
    else:
        """
        handler = logging.FileHandler(filename, mode = 'a')
        handler.setFormatter(logging.Formatter('%(asctime)s %(funcName)s %(levelname)s %(message)s'))
        logger = logging.getLogger(name)
        logger.addHandler(handler)
        """
        formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
        handler = logging.FileHandler(filename)
        handler.setFormatter(formatter)

        logger = logging.getLogger(name)
        logger.setLevel(logging.DEBUG)
        logger.addHandler(handler)

        return logger
    logger.setLevel(logging.DEBUG)
    return logger

logger = setup_logger('main.log')
local_logger = setup_logger('local_log.log', 'local_log')
Run Code Online (Sandbox Code Playgroud)
# other file under root log
logger = logging.getLogger("__main__." + __name__)
Run Code Online (Sandbox Code Playgroud)

blu*_*ues 5

如果您不希望本地记录器将其日志发送到根记录器处理程序,则必须停止传播:

logger.propagate = False
Run Code Online (Sandbox Code Playgroud)

文档的这一部分解释得很好:https ://docs.python.org/3/howto/logging.html#logging-flow