Skip to content

Commit

Permalink
Logging traceback for fatal errors (#1064)
Browse files Browse the repository at this point in the history
  • Loading branch information
vrdmr authored Jun 30, 2022
1 parent 66fb7dd commit f3ec8a9
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 5 deletions.
6 changes: 4 additions & 2 deletions azure_functions_worker/dispatcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from .logging import disable_console_logging, enable_console_logging
from .logging import enable_debug_logging_recommendation
from .logging import (logger, error_logger, is_system_log_category,
CONSOLE_LOG_PREFIX)
CONSOLE_LOG_PREFIX, format_exception)
from .utils.common import get_app_setting, is_envvar_true
from .utils.dependency import DependencyManager
from .utils.tracing import marshall_exception_trace
Expand Down Expand Up @@ -745,7 +745,9 @@ def gen(resp_queue):
if ex is grpc_req_stream:
# Yes, this is how grpc_req_stream iterator exits.
return
error_logger.exception('unhandled error in gRPC thread')
error_logger.exception(
'unhandled error in gRPC thread. Exception: {0}'.format(
format_exception(ex)))
raise


Expand Down
8 changes: 8 additions & 0 deletions azure_functions_worker/logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import logging
import logging.handlers
import sys
import traceback
from typing import Optional

# Logging Prefixes
Expand All @@ -20,6 +21,13 @@
error_handler: Optional[logging.Handler] = None


def format_exception(exception):
msg = str(exception) + "\n"
msg += ''.join(traceback.format_exception(
etype=type(exception), value=exception, tb=exception.__traceback__))
return msg


def setup(log_level, log_destination):
# Since handler and error_handler are moved to the global scope,
# before assigning to these handlers, we should define 'global' keyword
Expand Down
8 changes: 5 additions & 3 deletions azure_functions_worker/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def main():

from . import logging
from ._thirdparty import aio_compat
from .logging import error_logger, logger
from .logging import error_logger, logger, format_exception

args = parse_args()
logging.setup(log_level=args.log_level, log_destination=args.log_to)
Expand All @@ -48,8 +48,10 @@ def main():
try:
return aio_compat.run(start_async(
args.host, args.port, args.worker_id, args.request_id))
except Exception:
error_logger.exception('unhandled error in functions worker')
except Exception as ex:
error_logger.exception(
'unhandled error in functions worker: {0}'.format(
format_exception(ex)))
raise


Expand Down

0 comments on commit f3ec8a9

Please sign in to comment.