bls*_*sqr 2 python logging python-3.x
我试图在我的代码中具有以下功能:
develop = True目前,我正在使用 Python3logging模块,它(根据this)应该具有内置的功能。标志是logging.raiseExceptions = True。
但是,我没有让它在 MWE 中工作:无论我的标志设置是什么,我抛出的异常都不会重新引发。
# mwe.py
import logging
import logging.config
if __name__ == '__main__':
# Configure logging and set flag to raise exceptions
logging.config.fileConfig('log.conf')
logging.raiseExceptions = True
logger = logging.getLogger('root')
logger.info('Started')
# Test whether exceptions get raised
try:
raise RuntimeError("Ooops.")
except RuntimeError:
try:
logger.exception('There was an oops.')
# which is the same as logger.error('...', exc_info=True)
except:
print("GOTCHA! Exception was re-raised.")
logger.info('Finished')
Run Code Online (Sandbox Code Playgroud)
对应的配置文件:
# log.conf
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=consoleFormatter
[logger_root]
handlers=consoleHandler
level=DEBUG
[handler_consoleHandler]
class=logging.StreamHandler
formatter=consoleFormatter
args=(sys.stdout,)
[formatter_consoleFormatter]
format=%(filename)s (%(lineno)d) %(levelname)-8s - %(message)s
Run Code Online (Sandbox Code Playgroud)
这会产生以下输出:
mwe.py (12) INFO - Started
mwe.py (19) ERROR - There was an oops.
Traceback (most recent call last):
File "mwe.py", line 16, in <module>
raise RuntimeError("Ooops.")
RuntimeError: Ooops.
mwe.py (24) INFO - Finished
Run Code Online (Sandbox Code Playgroud)
为什么我没有进入该GOTCHA部分,尽管默认值为raiseExceptionsisTrue并且另外我也将其设置为True?我的配置有什么问题?
或者我对logging用于此目的的使用有什么大的误解?
(小问题:有没有办法raiseException在log.conf文件中配置标志?)
你理解错了。这不会重新引发任何自定义异常。这是为了更改日志模块的默认行为,该模块正在吞下内部日志记录异常,即错误配置的记录器试图写入没有写入权限的文件。这将失败默默默认设置,并logging.raiseException = True会造成错误配置记录仪或任何其他问题中记录模块,以提高你将不得不处理异常。
现在到了你想要达到的目的。在不抑制异常(让它传播)的情况下记录异常回溯是默认行为。如果未配置日志记录,则回溯将转到 stderr。如果配置了日志记录,日志处理程序会将其写入所需的位置。
所以基本上为了实现你的目标,你根本不应该处理异常。但是,如果您知道如何处理异常(意味着您知道导致异常的原因),那么通常您不需要记录回溯。
如果你坚持你仍然可以logger.exception(...)在你的except RuntimeError子句中使用并用 pure 重新引发异常raise:
try:
raise RuntimeError("Ooops.")
except RuntimeError:
logger.exception('There was an oops.')
raise
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2891 次 |
| 最近记录: |