1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-11-12 18:49:07 +00:00
trezor-firmware/core/src/trezor/log.py

78 lines
1.9 KiB
Python
Raw Normal View History

2016-04-29 17:54:54 +00:00
import sys
import utime
2018-07-03 14:20:26 +00:00
from micropython import const
2016-04-29 17:54:54 +00:00
2019-07-03 13:07:04 +00:00
if False:
from typing import Any
2016-04-29 17:54:54 +00:00
NOTSET = const(0)
DEBUG = const(10)
INFO = const(20)
WARNING = const(30)
ERROR = const(40)
CRITICAL = const(50)
_leveldict = {
2018-07-03 14:20:58 +00:00
DEBUG: ("DEBUG", "32"),
INFO: ("INFO", "36"),
WARNING: ("WARNING", "33"),
ERROR: ("ERROR", "31"),
CRITICAL: ("CRITICAL", "1;31"),
2016-04-29 17:54:54 +00:00
}
level = DEBUG
2016-04-29 17:54:54 +00:00
color = True
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def _log(name: str, mlevel: int, msg: str, *args: Any) -> None:
if __debug__ and mlevel >= level:
2016-04-29 17:54:54 +00:00
if color:
2018-07-03 14:20:58 +00:00
fmt = (
"%d \x1b[35m%s\x1b[0m \x1b["
+ _leveldict[mlevel][1]
+ "m%s\x1b[0m "
+ msg
)
2016-04-29 17:54:54 +00:00
else:
2018-07-03 14:20:58 +00:00
fmt = "%d %s %s " + msg
2017-03-06 16:33:42 +00:00
print(fmt % ((utime.ticks_us(), name, _leveldict[mlevel][0]) + args))
2016-04-29 17:54:54 +00:00
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def debug(name: str, msg: str, *args: Any) -> None:
2016-04-29 20:01:04 +00:00
_log(name, DEBUG, msg, *args)
2016-04-29 17:54:54 +00:00
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def info(name: str, msg: str, *args: Any) -> None:
2016-04-29 20:01:04 +00:00
_log(name, INFO, msg, *args)
2016-04-29 17:54:54 +00:00
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def warning(name: str, msg: str, *args: Any) -> None:
2016-04-29 20:01:04 +00:00
_log(name, WARNING, msg, *args)
2016-04-29 17:54:54 +00:00
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def error(name: str, msg: str, *args: Any) -> None:
2016-04-29 20:01:04 +00:00
_log(name, ERROR, msg, *args)
2016-04-29 17:54:54 +00:00
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def critical(name: str, msg: str, *args: Any) -> None:
_log(name, CRITICAL, msg, *args)
2017-06-12 16:16:06 +00:00
2019-07-03 13:07:04 +00:00
def exception(name: str, exc: BaseException) -> None:
# we are using `__class__.__name__` to avoid importing ui module
2019-10-02 12:40:25 +00:00
# we also need to instruct mypy to ignore the missing argument
# in ui.Result exception
if exc.__class__.__name__ == "Result":
2019-10-02 12:40:25 +00:00
_log(
name,
DEBUG,
"ui.Result: %s",
exc.value, # type: ignore[attr-defined] # noqa: F821
)
elif exc.__class__.__name__ == "Cancelled":
_log(name, DEBUG, "ui.Cancelled")
else:
_log(name, ERROR, "exception:")
# since mypy 0.770 we cannot override sys, so print_exception is unknown
sys.print_exception(exc) # type: ignore