From b90484acb7c4cc2c3a16a9a344c32cda9566be07 Mon Sep 17 00:00:00 2001 From: CaitSith2 Date: Fri, 24 Apr 2020 17:01:55 -0700 Subject: [PATCH] Implement logging options in mystery.py (#73) Required for using the multimystery.py from the doors branch without modifications. --- Mystery.py | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/Mystery.py b/Mystery.py index 0426c3f8..8e517dff 100644 --- a/Mystery.py +++ b/Mystery.py @@ -36,6 +36,8 @@ def main(): parser.add_argument('--outputpath') parser.add_argument('--race', action='store_true') parser.add_argument('--meta', default=None) + parser.add_argument('--log_output_path', help='Path to store output log') + parser.add_argument('--loglevel', default='info', help='Sets log level') for player in range(1, multiargs.multi + 1): parser.add_argument(f'--p{player}', help=argparse.SUPPRESS) @@ -87,8 +89,35 @@ def main(): erargs.teams = args.teams # set up logger + if args.loglevel: + erargs.loglevel = args.loglevel loglevel = {'error': logging.ERROR, 'info': logging.INFO, 'warning': logging.WARNING, 'debug': logging.DEBUG}[erargs.loglevel] - logging.basicConfig(format='%(message)s', level=loglevel) + import sys + class LoggerWriter(object): + def __init__(self, writer): + self._writer = writer + self._msg = '' + + def write(self, message): + self._msg = self._msg + message + while '\n' in self._msg: + pos = self._msg.find('\n') + self._writer(self._msg[:pos]) + self._msg = self._msg[pos + 1:] + + def flush(self): + if self._msg != '': + self._writer(self._msg) + self._msg = '' + + if args.log_output_path: + log = logging.getLogger("stderr") + log.addHandler(logging.StreamHandler()) + sys.stderr = LoggerWriter(log.error) + os.makedirs(args.log_output_path, exist_ok=True) + logging.basicConfig(format='%(message)s', level=loglevel, filename=os.path.join(args.log_output_path, f"{seed}.log")) + else: + logging.basicConfig(format='%(message)s', level=loglevel) if args.rom: erargs.rom = args.rom