Python debug: trace back

以下を必要な場所に書き込むと、

import logging
logger = logging.getLogger(__name__)
logger.error("ERROR", stack_info=True)

以下のような出力が得られる。便利。

traceback (most recent call last):
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 287, in <module>
    args.handler(args)
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 247, in run
    pgt.run()
  File "/Users/hironobu/WORK/guide2dl//pg_tuner/pg_tuner.py", line 216, in run
    study.optimize(self._objective, n_trials=self.conf.n_trials)

  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/study.py", line 451, in optimize
    _optimize(
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 66, in _optimize
    _optimize_sequential(
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 163, in _optimize_sequential
    frozen_trial = _run_trial(study, func, catch)
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 251, in _run_trial
    raise func_err
  File "/Users/hironobu/WORK/guide2dl/venv/lib/python3.9/site-packages/optuna/study/_optimize.py", line 200, in _run_trial
    value_or_values = func(trial)

  File "/Users/hironobu/WORK/guide2dl/pg_tuner/pg_tuner.py", line 50, in _objective
    score, ret = self.sc.run(self.conf.scenario, _log_dir, self.conf.monitoring_time)
  File "/Users/hironobu/WORK/guide2dl/pg_tuner/benchmark/sysbench.py", line 289, in run
    logger.error("ERROR", stack_info=True)