当前位置: 首页 > 知识库问答 >
问题:

python:如何在python use日志模块中创建和使用自定义记录器?

牧献
2023-03-14
import boto3
import logging


def get_logger(name=__name__, level=logging.DEBUG):
    # Create log handler
    logHandler = logging.StreamHandler()
    logHandler.setLevel(level)

    # Set handler format
    logFormat = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s", datefmt="%d-%b-%y")
    logHandler.setFormatter(logFormat)

    # Create logger
    logger = logging.getLogger(name)
    # Add handler to logger
    logger.addHandler(logHandler)

    # Stop propagating the log messages to root logger
    # logger.propagate = False

    return logger


def listBuckets():

    logThis = get_logger(level=logging.DEBUG)

    s3 = boto3.resource('s3')
    for bucket in s3.buckets.all():
        logThis.debug(msg='This message is from logger')
        print(bucket.name)


listBuckets()

共有1个答案

石正信
2023-03-14

您忽略了这样一个事实:a)每个记录器的最终祖先都是根记录器(默认情况下它具有级别警告);b)记录器和处理程序都具有级别。

文档声明:

当创建记录器时,级别设置为NOTSET(当记录器是根记录器时,这将导致处理所有消息;当记录器是非根记录器时,将委托给父记录器)。

如果到达了根,并且它具有NOTSET级别,那么所有消息都将被处理。否则,根的级别将用作有效级别。

这意味着,您将立即在根记录器中确定有效的日志级别;根据根记录器的默认值,它被设置为warning。您可以使用父级属性以及Logger对象上的GetEffectiveLevel方法检查这一点:

logThis = get_logger()
print(logThis.parent)               # <RootLogger root (WARNING)>
print(logThis.level)                # 0 (= NOTSET)
print(logThis.getEffectiveLevel())  # 30 (= WARNING) from root logger

要让记录器处理所需级别上的消息,只需通过get_logger函数中的logger.setlevel(level)在记录器上设置它。

 类似资料:
  • 目前在spring Boot1.3中,我们只能将访问日志记录到文件系统中的一个文件。有没有办法实际使用自定义记录器(像log4j2)来记录访问日志? 我目前正在使用undertow和spring boot,但是在检查spring boot源代码之后,undertow记录器是用DefaultAccessLogReceiver初始化的,它正在写入文件。如果可能的话,我希望使用AccessLogHand

  • 我正在尝试用标准的Python日志记录到文件来替换一种旧的记录信息的方法。该应用程序目前有一个日志文件,它被设置为捕获信息和调试消息,所以我希望它在一个较低的级别,而不是由主日志捕获。 应用程序结构: 在和中是对旧的函数的调用,我不希望将该函数记录在中,但也不希望它们出现在文件中。 理想的工作方式是创建一个带有调试函数的包装器,该函数在新的级别上进行日志记录,我已经了解到这需要的扩展。 因此,在中

  • 问题内容: 如何使用Python中的日志记录模块写入文件?每当我尝试使用它时,它只会打印出消息。 问题答案: 一个使用而不是一个例子 按顺序,这五个部分执行以下操作: 设置输出文件() 将其设置为追加而不是覆盖() 确定输出消息的格式() 确定输出时间的格式() 并确定它将接受的最低消息级别()。

  • 问题内容: 我想为我的应用程序使用loglevel TRACE(5),因为我认为这还不够。另外不是我想要的。如何将自定义日志级别添加到Python记录器? 我有以下内容: 在我的代码中,我通过以下方式使用它: 现在我想打电话 在此先感谢您的帮助。 编辑 (2016年12月8日):我[pfa的)可接受答案更改为IMHO,这是基于Eric S的非常好的建议的出色解决方案。 问题答案: @Eric S.

  • 将PostSharp用于C#应用程序,我有以下场景: Namespace_ACustomLoggingMethod Namespace_B.DoThings thingMethod(实际上是几种不同的方法) DoMomthingMethod调用CustomLoggingMethod,它以所需的格式创建日志条目并且运行良好。正如预期的那样,日志条目将源记录为CustomLoggingMethod,我

  • 我有一个小的python项目,它有如下结构-- 我计划使用默认日志模块将消息打印到stdout和一个日志文件。要使用日志模块,需要进行一些初始化- 目前,我在开始记录消息之前在每个模块中执行此初始化。是否有可能在一个地方只执行一次初始化,以便通过在整个项目中进行日志记录来重用相同的设置?