bow
bow

Reputation: 2563

python - Selective handling of exception traceback

I'm trying to have an exception handling mechanism with several layers of information to display to the user for my application, using python's logging module.

In the application, the logging module has 2 handlers: a file handler for keeping DEBUG information and a stream handler for keeping INFO information. By default, the logging level is set to INFO. What I'm trying to achieve is a setup where if any exception occurs, the user gets shown a simple error message without any tracebacks by default. If the logging level is set to DEBUG, the user should still get the simple message only, but this time the exception traceback is logged into a log file through the file handler.

Is it possible to achieve this?

I tried using logger.exception(e), but it always prints the traceback onto the console.

Upvotes: 1

Views: 511

Answers (2)

Simon Bergot
Simon Bergot

Reputation: 10582

The traceback module may help you. At the top level of your application, you should put a catch all statement:

setup_log_and_other_basic_services()
try:
    run_your_app()
except Exception as e:
    if is_debug():
        traceback.print_stack()
    else:
        traceback.print_stack(get_log_file())
    print e

the code outside the try/catch block should not be allowed to crash.

Upvotes: 2

przemo_li
przemo_li

Reputation: 4053

Write your custom exception handling function, and use it every time you write catch.

In this function you should check which mode is on (INFO or DEBUG) and then extract info about exception and feed it to logger manually when needed.

Upvotes: 0

Related Questions