41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
import sys
|
|
from .cli import CliOptions
|
|
|
|
|
|
class Logger:
|
|
def __init__(self, options: CliOptions):
|
|
self._debug_main = options.debug_main
|
|
self._debug_frida = options.debug_frida
|
|
self._output_callback = None
|
|
|
|
def set_output_callback(self, callback):
|
|
"""Set callback(level, text) for GUI log capture."""
|
|
self._output_callback = callback
|
|
|
|
def _emit(self, level, *messages):
|
|
text = " ".join(str(m) for m in messages)
|
|
print(text, flush=True, file=sys.stderr if level == "error" else sys.stdout)
|
|
if self._output_callback:
|
|
try:
|
|
self._output_callback(level, text)
|
|
except Exception:
|
|
pass
|
|
|
|
def info(self, *messages):
|
|
self._emit("info", *messages)
|
|
|
|
def error(self, *messages):
|
|
self._emit("error", *messages)
|
|
|
|
def main_debug(self, *messages):
|
|
if self._debug_main:
|
|
self._emit("debug", *messages)
|
|
|
|
def frida_debug(self, *messages):
|
|
if self._debug_frida:
|
|
self._emit("frida", *messages)
|
|
|
|
|
|
def create_logger(options: CliOptions) -> Logger:
|
|
return Logger(options)
|