Skip to content

Commit

Permalink
Include full stack trace in error logging
Browse files Browse the repository at this point in the history
  • Loading branch information
jmpettit committed Mar 21, 2024
1 parent 0fea167 commit 15076b7
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
6 changes: 3 additions & 3 deletions nornir_nautobot/plugins/tasks/dispatcher/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from nornir_netmiko.tasks import netmiko_send_command

from nornir_nautobot.exceptions import NornirNautobotException
from nornir_nautobot.utils.helpers import make_folder, format_jinja_stack_trace
from nornir_nautobot.utils.helpers import make_folder, get_stack_trace

_logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -174,7 +174,7 @@ def generate_config(
jinja_env=jinja_env,
)[0].result
except NornirSubTaskError as exc:
stack_trace = format_jinja_stack_trace(exc.result.exception)
stack_trace = get_stack_trace(exc.result.exception)

error_mapping = {
jinja2.exceptions.UndefinedError: ("E1010", "Undefined variable in Jinja2 template"),
Expand All @@ -189,7 +189,7 @@ def generate_config(
logger.error(error_msg, extra={"object": obj})
raise NornirNautobotException(error_msg)

error_msg = f"`E1014:` Unknown error - `{exc.result.exception}`"
error_msg = f"`E1014:` Unknown error - `{exc.result.exception}`\n```\n{stack_trace}\n```"
logger.error(error_msg, extra={"object": obj})
raise NornirNautobotException(error_msg)

Expand Down
3 changes: 1 addition & 2 deletions nornir_nautobot/utils/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,7 @@ def import_string(dotted_path):
except (ModuleNotFoundError, AttributeError):
return None

def format_jinja_stack_trace(exc: Exception) -> str:
def get_stack_trace(exc: Exception) -> str:
"""Generate and format a stack trace string for a given Jinja exception."""
stack_trace_lines = traceback.format_exception(type(exc), exc, exc.__traceback__)
stack_trace_lines = [line for line in stack_trace_lines if '.j2' in line or '{{' in line]
return "\n".join(stack_trace_lines)

0 comments on commit 15076b7

Please sign in to comment.