Python 使用完整stacktrace记录错误时添加条目之间的分隔
目前,我正在使用Python 使用完整stacktrace记录错误时添加条目之间的分隔,python,logging,error-logging,Python,Logging,Error Logging,目前,我正在使用exc_info=True的logging模块以完整的stacktrace记录错误 但是结果很难直观地解析,因为记录异常时,它们之间没有分隔符。当您使用raise。。。从语法,因为它的输出包括空白行,所以你的眼睛被画到STACKTRONG中间的某个地方,而不是开始。 如何获得更好的格式?在每个stacktrace之后,像是一行------就可以了 代码示例: #Setup import logging def setup_logger(name, log_file, level
exc_info=True
的logging
模块以完整的stacktrace记录错误
但是结果很难直观地解析,因为记录异常时,它们之间没有分隔符。当您使用raise。。。从语法,因为它的输出包括空白行,所以你的眼睛被画到STACKTRONG中间的某个地方,而不是开始。
如何获得更好的格式?在每个stacktrace之后,像是一行------就可以了
代码示例:
#Setup
import logging
def setup_logger(name, log_file, level=logging.INFO, removeExistingHandlers=True):
"""Function setup different loggers as you want"""
logger = logging.getLogger(name)
logger.setLevel(level)
#remove existing handlers
##without this, running the script multiple times means the log filess will be added as handlers
##multiple times, and every warning gets written into the log multiple times
if removeExistingHandlers:
existingHandlers = logger.handlers.copy()
for exHandler in existingHandlers:
logger.removeHandler(exHandler)
#add new handler
handler = logging.FileHandler(log_file)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
def do_something():
try:
raise Exception("ok")
except Exception as e:
raise Exception("WORSE") from e
errorLog = setup_logger('stacktrace_logger', 'err.log')
#Use
try:
raise Exception("bad")
except Exception as e:
errorLog.error(e, exc_info=True)
try:
do_something()
except Exception as e:
errorLog.error(e, exc_info=True)
看起来您需要一个自定义格式化程序,cf一个根据Bruno的建议执行此任务的自定义格式化程序的实现
class SeperatedExcFormatter(logging.Formatter):
def formatException(self, exc_info):
result = super().formatException(exc_info)
if exc_info:
result = result + "\n------------------------------------------------"
return result
若要使用,请将formatter=logging.formatter('%(asctime)s%(levelname)s%(message)s')
替换为formatter=separatedexfcformatter('%(asctime)s%(levelname)s%(message)s')
看看,这可能解决了您的问题?这可能会使异常更容易解析,但我不认为这有助于区分不同异常的日志。