control.py 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # -*- coding: utf-8 -*-
  2. # *****************************************************************************
  3. # Copyright (C) 2006-2020 Jorgen Stenarson. <jorgen.stenarson@bostream.nu>
  4. # Copyright (C) 2020 Bassem Girgis. <brgirgis@gmail.com>
  5. #
  6. # Distributed under the terms of the BSD License. The full license is in
  7. # the file COPYING, distributed as part of this software.
  8. # *****************************************************************************
  9. import os
  10. from logging import FileHandler, Formatter, StreamHandler
  11. from logging.handlers import DEFAULT_TCP_LOGGING_PORT
  12. from typing import Optional
  13. from .logger import LOGGER
  14. from .socket_stream import SocketStream
  15. _default_formatter_str = os.environ.get("PYREADLINE_FORMATTER", "%(message)s")
  16. SOCKET_HANDLER: Optional["StreamHandler[SocketStream]"] = None
  17. FILE_HANDLER: Optional[FileHandler] = None
  18. def start_socket_log(
  19. host: str = "localhost",
  20. port: int = DEFAULT_TCP_LOGGING_PORT,
  21. formatter_str: str = _default_formatter_str,
  22. ) -> None:
  23. global SOCKET_HANDLER
  24. if SOCKET_HANDLER is not None:
  25. return
  26. SOCKET_HANDLER = StreamHandler(SocketStream(host, port))
  27. SOCKET_HANDLER.setFormatter(Formatter(formatter_str))
  28. LOGGER.addHandler(SOCKET_HANDLER)
  29. def stop_socket_log() -> None:
  30. global SOCKET_HANDLER
  31. if SOCKET_HANDLER is None:
  32. return
  33. LOGGER.removeHandler(SOCKET_HANDLER)
  34. SOCKET_HANDLER = None
  35. def start_file_log(filename: str) -> None:
  36. global FILE_HANDLER
  37. if FILE_HANDLER is not None:
  38. return
  39. FILE_HANDLER = FileHandler(filename, "w")
  40. LOGGER.addHandler(FILE_HANDLER)
  41. def stop_file_log() -> None:
  42. global FILE_HANDLER
  43. if FILE_HANDLER is None:
  44. return
  45. LOGGER.removeHandler(FILE_HANDLER)
  46. FILE_HANDLER.close()
  47. FILE_HANDLER = None
  48. def stop_logging() -> None:
  49. stop_file_log()
  50. stop_socket_log()