Bas*_*ass 2 python logging exception
下面的脚本是将所有错误写入日志文件和控制台,除了引发的异常,它只写在控制台而不是日志上.如何让它将引发的异常写入日志,或任何运行时异常?谢谢.
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")
Run Code Online (Sandbox Code Playgroud)
配置文件:
[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=
Run Code Online (Sandbox Code Playgroud)
为了使用logging模块捕获所有错误,第一个要求是使用except语句捕获所有错误.一旦捕获它们,您就必须Logger.exception()根据错误级别调用或其他合适的函数.
如果你不能捕获所有异常提前,最好的办法是重定向stdout和stderr到一个文件.然后,执行a tail -f来模拟控制台输出.无论如何,一个未捕获的异常将导致您的程序执行被停止.
但是,我宁愿尝试捕捉所有异常,即使这意味着必须做这样的事情.
try:
Main.main()
except Exception as e:
logging.Exception("Unexpected exception! %s",e)
Run Code Online (Sandbox Code Playgroud)
这允许您使用整洁的logging模块,而不必依赖于糟糕的输出重定向.
| 归档时间: |
|
| 查看次数: |
6645 次 |
| 最近记录: |