Python:向控制台和日志文件显示并记录运行时错误
下面的脚本将所有错误写入日志文件和控制台,除了仅在控制台上写入并且不在日志中的引发异常外。如何让它写出引发的异常记录或任何运行时异常?谢谢。Python:向控制台和日志文件显示并记录运行时错误
import os
import sys
import logging
import logging.config
class Main(object):
@staticmethod
def main():
logging.config.fileConfig("logging.conf")
logging.debug("1")
logging.info("2")
logging.warn("3")
logging.error("4")
logging.critical("5")
raise Exception("test")
if __name__ == "__main__":
Main.main()
import logging
import logging.config
logging.config.fileConfig('logging.conf')
# create logger
logger = logging.getLogger('simpleExample')
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
raise Exception("Exception raised")
配置文件:
[loggers]
keys=root,simpleExample
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0
[handler_fileHandler]
formatter=simpleFormatter
args=('error.log')
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
为了让使用logging
模块捕获的所有错误,第一个要求是给你用,除了声明赶上他们。一旦你捕捉到它们,你就必须根据错误的级别调用Logger.exception()
或其他合适的函数。
如果您不能预先捕获所有异常,最好的办法是将stdout
和stderr
重定向到一个文件。然后,执行tail -f
模拟控制台输出。无论如何,一个未捕获的异常将导致程序执行被停止。
但是,我宁愿试图捕捉所有异常,即使这意味着必须做这样的事情。
try:
Main.main()
except Exception as e:
logging.Exception("Unexpected exception! %s",e)
这使您可以使用,而不必依赖于蹩脚的输出重定向整齐logging
模块。
感谢您的快速反馈。目标是使用更灵活的日志记录模块。我试图避免使用尝试/除了整个主,因为我想有更多的控制处理异常。有没有办法通过配置文件管理运行时错误日志和控制台? – Bass 2012-02-25 05:45:13
无论如何,任何运行时错误都会导致整个程序停止运行。所以,除非你发现这个例外,否则没有什么可做的。但是,如果你使用'Logger.exception()',你也会得到回溯,所以它和获得运行时错误一样好。这可以在main()上完成。你仍然能够追踪错误,因为追溯 – Phani 2012-02-25 05:51:00
问题在这里,我想抛出一些异常并从其他人身上恢复。所以在main中使用全局异常可能不是一个好主意。另外,主要方法在其他文件中调用许多其他函数,所以try/except可能不会覆盖它们。我想记录运行时异常的原因是因为我的应用程序作为Web服务运行,所以如果用户发出请求并且由于生产者运行时错误而没有得到响应,那么我可以轻松排除故障。 – Bass 2012-02-25 06:48:52
您是否正在使用FileHandler将日志输出到日志文件? – Phani 2012-02-25 05:16:17
对不起,我只是添加了文件处理程序,但同样的问题。 – Bass 2012-02-25 05:36:53
无法记录运行时错误。你需要先回答他们,如答案中所述。 – Phani 2012-02-25 05:39:10