gpt4 book ai didi

python - 如何为所有处理程序设置相同的日志记录格式?

转载 作者:太空宇宙 更新时间:2023-11-03 10:53:05 24 4
gpt4 key购买 nike

我正在使用 .setFormatter()在我的每个处理程序上设置相同的 logging.Formatter()

有没有办法设置全局默认格式?

或者 - 是否可以迭代已经通过 .addHandler() 添加到记录器的处理程序?

Another question提到什么格式是什么,但没有提到如何设置它。

最佳答案

预期的方法是在您创建每个处理程序时将格式化程序附加到它们。

因为您应该在主程序开始时在一个中央位置设置日志记录目的地,所以这样做并不费力。

例如这是我在要自动运行的脚本中使用的股票日志记录设置代码:

# set up logging #####################################
import sys,logging,logging.handlers,os.path
log_file=os.path.splitext(__file__)[0]+".log"
l = logging.getLogger()
l.setLevel(logging.DEBUG)
f = logging.Formatter('%(asctime)s %(process)d:%(thread)d %(name)s %(levelname)-8s %(message)s')
h=logging.StreamHandler(sys.stdout)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
h=logging.handlers.RotatingFileHandler(log_file,maxBytes=1024**2,backupCount=1)
h.setLevel(logging.NOTSET)
h.setFormatter(f)
l.addHandler(h)
del h,f
#hook to log unhandled exceptions
def excepthook(type,value,traceback):
logging.error("Unhandled exception occured",exc_info=(type,value,traceback))
#Don't need another copy of traceback on stderr
if old_excepthook!=sys.__excepthook__:
old_excepthook(type,value,traceback)
old_excepthook = sys.excepthook
sys.excepthook = excepthook
del excepthook,log_file
# ####################################################

还有其他方法,但每种方法都有缺点:

  • 每个记录器都有一个未记录的 <logger>.handlers列表,但它只列出直接连接到该记录器的处理程序。因此,如果您有多个记录器,则需要遍历此列表以获取所有记录器。
  • 有一个全局未记录的 logging._handlerList (对所有处理程序的引用都保留在那里以在退出时将它们关闭)。同样,这是一个实现细节。
  • 最后,您可以通过以下方式覆盖处理程序的初始化逻辑

    • 替换 __init__ Handler 的方法和/或子类(这将影响使用 logging 的所有其他内容),或通过
    • 子类化/addin a mixin到必修课。

    这可能有点矫枉过正。

关于python - 如何为所有处理程序设置相同的日志记录格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46548303/

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