【问题标题】:Problems with setting up a Logger Class in Python在 Python 中设置 Logger 类的问题
【发布时间】:2019-07-18 21:34:51
【问题描述】:

我创建了这个记录器类,它非常适合我拥有的项目,但是当我简单地将结构复制并粘贴到另一个项目时,它不起作用。我尝试写入的日志既没有出现在指定的文件中,也没有出现在控制台中。

这是代码:

import logging


class Logger:
    def __init__(self, path=None, name=None):
        format_string = '%(asctime)s : T%(relativeCreated)05ds : %(levelname)-8s - %(name)s : %(message)s'
        format_date = '%Y-%m-%dT%H:%M:%S'

        # BASIC CONFIG
        if path is not None:
            logging.basicConfig(filename=path, filemode='a', format=format_string, datefmt=format_date)

        # START LOGGER
        logger = logging.getLogger(name)

        if path is None:
            # DEFINE FORMAT 
            handler = logging.StreamHandler()
            formatter = logging.Formatter(fmt=format_string, datefmt=format_date)
            handler.setFormatter(formatter)
            logger.addHandler(handler)

        # LEVEL SET
        logger.setLevel(logging.DEBUG)

        logger.info('TEST')

        self.logger = logging.getLogger(__name__)
        self.logger.info(f'START NEW EXECUTION\n\n{"=" * 36}\n')

self.logger.info(f'START NEW EXECUTION\n\n{"=" * 36}\n') 行不会将任何内容打印到由变量 path 设置的文件中。这只发生在我向记录器添加name 时。我添加了这个 name 变量作为我发现的建议,以避免编写 Python 模块的日志。

我觉得我正在做一些非常简单的事情(我刚刚开始使用日志记录模块)导致了这个问题,但我看不到它,因为这个确切的结构在另一个项目中工作正常。

编辑0: 我的最终目标是拥有一个我可以在任何项目中使用的 Logger 类,只需复制文件并以相同的方式使用它,如果有人有这样的东西并且不介意分享,那对我来说就足够了。

【问题讨论】:

    标签: python logging


    【解决方案1】:

    我的最终目标是拥有一个我可以在任何项目中使用的 Logger 类,只需复制文件并以相同的方式使用它,如果有人有这样的东西并且不介意分享,那对我来说就足够了.

    我建议您创建一些可以导入的东西,而不是复制粘贴代码,这样如果您想进行更改,您只需在一个地方更新它。但由于您愿意使用现有工具,我会推荐default logger 或我个人最喜欢的loguru

    来自 loguru 的示例

    from loguru import logger
    
    logger.debug("That's it, beautiful and simple logging!")
    

    【讨论】:

    • 仍然需要向这个 loguru 添加一些代码,以将所有内容配置为我想的方式(日期、字符串等的所有格式)。使用这个模块是否更容易做到这一点?
    • loguru 很容易自定义,您可以使用logger.remove() 删除默认接收器,然后添加自定义接收器logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")。你可以找到完整的文档here
    • 不同的python文件如何使用相同的日志?
    • 您可以创建一个新的 sink 用于将日志发送到,例如logger.add("file.log")
    • 不,您只需在每个项目中添加此行一次,然后其他文件可以导入记录器from logger import logger,它将自动具有相同的接收器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多