logger.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. import time
  2. from .handler import handler
  3. from .levels import levels
  4. class logger:
  5. """
  6. That class is responsible for managing log handlers, and generating
  7. log message. That formats log messages by adding time, date and also
  8. level of the message.
  9. """
  10. def __init__(self) -> None:
  11. """
  12. That initialize handlers set.
  13. """
  14. self.__handlers = set()
  15. def _get_handlers(self) -> tuple:
  16. """
  17. That returns copy of the handlers list.
  18. """
  19. return tuple(self.__handlers)
  20. def _get_message(
  21. self,
  22. level: levels,
  23. content: str,
  24. *args,
  25. **kwargs
  26. ) -> str:
  27. """
  28. That try to format log message. It require level of the message and
  29. also message itself. When it get only level and message itself, that
  30. only add message to level and timestamp info. When more parameters
  31. had been given that run format function on the first message. It is
  32. useable when log message must contain for example IP address or
  33. other things like that.
  34. Parameters
  35. ----------
  36. level : levels
  37. Log level of the message.
  38. content : str
  39. Content of the message to log.
  40. *args, **kwargs
  41. Optional arguments used when format would be used.
  42. Returns
  43. -------
  44. str
  45. Result message which would be saved in the logs.
  46. """
  47. if len(args) > 0 or len(kwargs) > 0:
  48. content = content.format(*args, **kwargs)
  49. return ( \
  50. self.__level_name(level) + " " + \
  51. self.time_stamp + " " + \
  52. content \
  53. )
  54. @property
  55. def time_stamp(self) -> str:
  56. """
  57. That return current time as timestamp to use in log message.
  58. Returns
  59. -------
  60. str
  61. Current time as timestamp.
  62. """
  63. return "(" + time.strftime("%Y-%m-%d %H:%M:%S") + ")"
  64. def __level_name(self, level: levels) -> str:
  65. """
  66. That convert level enum value into level stamp.
  67. Parameters
  68. ----------
  69. level : levels
  70. Level enum to convert.
  71. Returns
  72. -------
  73. str
  74. Result as string stamp.
  75. """
  76. name = ""
  77. if level == levels.info:
  78. name = "info"
  79. if level == levels.warning:
  80. name = "warning"
  81. if level == levels.error:
  82. name = "error"
  83. if level == levels.critical:
  84. name = "CRITICAL"
  85. return ("[" + name + "]")
  86. def use_handler(self, target: handler) -> object:
  87. """
  88. That add new handler to the handlers set.
  89. Parameters
  90. ----------
  91. target : handler
  92. New handler to add.
  93. Returns
  94. -------
  95. Self to chain loading.
  96. """
  97. self.__handlers.add(target)
  98. return self