Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:警告和日志详细限制_Python_Logging_Warnings - Fatal编程技术网

Python:警告和日志详细限制

Python:警告和日志详细限制,python,logging,warnings,Python,Logging,Warnings,我想统一我的应用程序的整个日志功能。任何警告都会引发异常,接下来我会捕获它并将其传递给记录器。但问题是:在日志中是否有任何静音功能?有时记录器变得过于冗长。有时由于警告过于嘈杂,警告中是否有详细限制 来自您提到的来源。 有日志级别,请明智地使用;-) 如果您计划从某个不知道引起错误的代码的盲错误处理程序调用所有日志记录,这将是一个问题,您的问题听起来就是这样。您将如何决定进行哪些日志记录调用,哪些不进行 更标准的做法是尽可能使用这些块进行恢复,并记录错误(实际上,如果这是一个您没有特别准备的错

我想统一我的应用程序的整个日志功能。任何警告都会引发异常,接下来我会捕获它并将其传递给记录器。但问题是:在日志中是否有任何静音功能?有时记录器变得过于冗长。有时由于警告过于嘈杂,警告中是否有详细限制


来自您提到的来源。 有日志级别,请明智地使用;-)


如果您计划从某个不知道引起错误的代码的盲错误处理程序调用所有日志记录,这将是一个问题,您的问题听起来就是这样。您将如何决定进行哪些日志记录调用,哪些不进行

更标准的做法是尽可能使用这些块进行恢复,并记录错误(实际上,如果这是一个您没有特别准备的错误,您希望了解它;请使用高级别)。但不要依赖这些块来获取所有状态/调试信息。最好在代码到达错误处理程序之前,在代码中加入日志调用。这样,当系统没有发生故障时,您可以观察到有关系统的有用运行时信息,并且可以进行不同严重性的日志调用。例如:

import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger.  Change this for better organization
# Add your appenders or what have you
def handle_error(e):
    logger.error("Unexpected error found")
    logger.warn(format_exc()) #put the traceback in the log at lower level
    ... #Your recovery code
def do_stuff():
    logger.info("Program started")
    ... #Your main code
    logger.info("Stuff done")
if __name__ == "__main__":
    try:
        do_stuff()
    except Exception,e:
        handle_error(e)
不仅如此,还有一种非常灵活的方法。如果您正在使用命名的
logger
对象(例如,
logger=logging.getLogger(…)
),那么您可以适当地配置它们。这将允许您逐个子系统配置详细信息,其中子系统由日志层次结构定义

另一个选项是使用和限制输出。我以前从未使用过这种方法,但它看起来可能更适合您的需要

阅读Python
logging
包的良好散文描述。我认为它比模块文档更好地描述了功能

澄清后编辑
您可以使用基于
logging.Logger
的自定义类处理此日志记录部分,并使用
logging.setLoggerClass()
注册。听起来您确实想要类似于syslog的“最后一条消息重复9次”的东西。不幸的是,我不知道在任何地方有这样的实现。您可能需要查看是否支持此功能。

问题不在日志级别!我不知道如何实现详细限制。如何禁止打印上百条类似的消息,而只打印前几条?我说的是略有不同的事情。我想使记录器在N条消息相等后静音。我不恰当地提出了一个问题,我需要设置详细限制,以使记录器在达到指定的静音限制后关闭。
import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger.  Change this for better organization
# Add your appenders or what have you
def handle_error(e):
    logger.error("Unexpected error found")
    logger.warn(format_exc()) #put the traceback in the log at lower level
    ... #Your recovery code
def do_stuff():
    logger.info("Program started")
    ... #Your main code
    logger.info("Stuff done")
if __name__ == "__main__":
    try:
        do_stuff()
    except Exception,e:
        handle_error(e)