def do_checklog(filename, ignore, echo):
ignore = [i for i in ignore if not i.startswith('#')]
_logger.debug("ignored regular expressions:\n%s", '\n'.join(ignore))
ignore_regexes = [re.compile(i, re.MULTILINE) for i in ignore]
if echo is None and filename == '-':
echo = True
with click.open_file(filename) as logfile:
cur_rec_mo = None
cur_rec = []
error_records = []
ignored_error_records = []
def _process_cur_rec():
# record start, process current record
if cur_rec_mo and \
cur_rec_mo.group('loglevel') not in NON_ERROR_LEVELS:
record = ''.join(cur_rec)
for ignore_regex in ignore_regexes:
if ignore_regex.search(record):
ignored_error_records.append(record)
break
else:
error_records.append(record)
reccount = 0
for line in logfile:
if echo:
click.echo(line, nl=False, color=True)
sys.stdout.flush()
line = ANSI_CSI_RE.sub('', line) # strip ANSI colors
mo = LOG_START_RE.match(line)
if mo:
reccount += 1
_process_cur_rec()
cur_rec_mo = mo
cur_rec = [line]
else:
cur_rec.append(line)
_process_cur_rec() # last record
if not reccount:
raise click.ClickException("No Odoo log record found in input.")
if error_records or ignored_error_records:
msg = _render_errors(error_records, ignored_error_records)
click.echo(msg)
if error_records:
raise click.ClickException("Errors detected in log.")
评论列表
文章目录