gpt4 book ai didi

python - 日志级别随机变化,并不总是写入文件

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:40 25 4
gpt4 key购买 nike

我有这段代码可以在 Python 中设置我的记录器:

  #Configure logging
logging.basicConfig(format = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename= "log.txt",
level = logging.getLevelName('DEBUG'))


print(logging.getLogger().getEffectiveLevel())

但打印语句的输出有时是这样的:

30

其他时候是这样的(这是正确的):

10

但通常即使将日志记录级别设置为正确的数字,它也不会将任何内容记录到文件中,但其他时候它会起作用。我需要做什么来确保我的日志记录级别设置正确?

*编辑:以下是我根据@randomir 的建议提出的解决方案。**编辑:我必须在调用 logging.basicConfig() 后设置级别的位置进行第二次更改,否则日志级别仍未得到一致调用。 `logging.getLogger().setLevel(...) 行现在似乎可以工作了。

我创建了一个新类:Logger.py。

import logging

class Logger(object):
def __init__(self):
logging.basicConfig(format = '%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
datefmt='%m-%d %H:%M',
filename= "log.txt")

logging.getLogger().setLevel(logging.getLevelName("DEBUG"))

print(logging.getLogger().getEffectiveLevel())

现在我不再直接在启动类中配置基本配置,而是只实例化记录器类一次:

from Logger import Logger
import logging

class LaunchPython(object):
#Configure Logging
Logger()

logging.info("Application has started")

在调用记录器的所有后续类中,我只是将 import logging 放在顶部,然后执行 logging.info(...)logging。调试(....)。无需导入 Logger.py 类并重新实例化它。

最佳答案

logging.basicConfig()为您的应用程序创建一个根记录器(这是一个名为 root 的记录器,您可以使用 logging.getLogger('root')logging 获取它。 getLogger()).

诀窍是 root 记录器在第一次调用任何记录函数(如 logging.info)时使用默认值(如 level=30)创建()) 如果它还不存在。因此,请确保在登录应用程序的任何其他部分之前调用您的 basicConfig()

您可以通过将您的记录器配置提取到一个单独的模块(例如 logger.py),然后将该模块导入到您的每个模块中来做到这一点。或者,如果您的应用程序有一个中央入口点,只需在那里进行配置。请注意,您调用的第 3 方函数还将创建 root 记录器(如果它不存在)。

另请注意,如果您的应用程序是多线程的:

Note This function should be called from the main thread before other threads are started. In versions of Python prior to 2.7.1 and 3.2, if this function is called from multiple threads, it is possible (in rare circumstances) that a handler will be added to the root logger more than once, leading to unexpected results such as messages being duplicated in the log.

关于python - 日志级别随机变化,并不总是写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44957262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com