<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      編寫Logger通用類

      主要功能:
      print → DebugLogger → debug.log

      log_info() → InfoLogger → info.log

      log_time() → InfoLogger → info.log

      log_err() → ErrorLogger → error.log

      logger.py

      import logging.config
      import threading
      import os
      import sys
      import time
      from abc import ABC, abstractmethod
      from datetime import datetime
      from typing import Optional
      
      # Setup logs directory
      os.makedirs("logs", exist_ok=True)
      
      # Configure logging
      logging.config.fileConfig('logging.conf')
      
      
      class DualLogger(ABC):
          def __init__(self, logger: logging.Logger, level: int, use_stderr: bool = False):
              self.terminal = sys.__stderr__ if use_stderr else sys.__stdout__
              self.logger = logger
              self.level = level
      
          def write(self, message: str) -> None:
              if not message.strip():
                  return
              self._console(message.rstrip())
              self.log(message.rstrip())
      
          def flush(self) -> None:
              self.terminal.flush()
      
          @abstractmethod
          def log(self, message: str) -> None:
              pass
      
          def _console(self, message: str) -> None:
              thread_name = threading.current_thread().name
              timestamp = datetime.now().strftime('%H:%M:%S.%f')[:-3]
              self.terminal.write(f"{timestamp}::{thread_name}::{message}\n")
      
      
      class DebugLogger(DualLogger):
          def log(self, message: str) -> None:
              self.logger.debug(message)
      
      
      class InfoLogger(DualLogger):
          def log(self, message: str) -> None:
              self.logger.info(message)
      
      class TimeLogger(DualLogger):
          def log(self, message: str) -> None:
              self.logger.info(message)
      
      class ErrorLogger(DualLogger):
          def __init__(self):
              super().__init__(logging.getLogger("error"), logging.ERROR, use_stderr=True)
      
          def log(self, message: str) -> None:
              self.logger.error(message)
      
      
      # Configure system loggers
      sys.stdout = DebugLogger(logging.getLogger("debug"), logging.DEBUG)
      sys.stderr = ErrorLogger()
      info_logger = InfoLogger(logging.getLogger("info"), logging.INFO)
      
      
      class ElapseTimer:
          def __init__(self):
              self._thread_local = threading.local()
      
          def get_elapsed(self) -> float:
              current_time = time.time()
              if not hasattr(self._thread_local, 'previous_time'):
                  self._thread_local.previous_time = current_time
              elapsed = current_time - self._thread_local.previous_time
              self._thread_local.previous_time = current_time
              return elapsed
      
      
      timer = ElapseTimer()
      
      
      def time_key(s: Optional[str], logger: DualLogger) -> None:
          if not s:
              return
          try:
              elapsed = timer.get_elapsed()
              logger.write(f"{elapsed:1.3f}--{s}")
          except Exception as e:
              sys.__stderr__.write(f"Time key error: {str(e)}\n")
      
      
      # Public API
      def log_err(s: str) -> None:
          sys.stderr.write(s)
      
      
      def log_info(s: str) -> None:
          info_logger.write(s)
      
      def log_time(s: str) -> None:
          time_key(s, info_logger)
      
      
      if __name__ == '__main__':
          # 普通日志
          print("中文 message")  # 輸出到debug.log
      
          log_info("中文Operation started")  # 輸出到info.log
          # 耗時跟蹤
          log_time("中文Operation started") # 輸出到info.log
          time.sleep(0.5)
          log_time("中文Operation completed")
          log_time("中文Operation started3")
          time.sleep(0.5)
          log_time("中文Operation completed4")
          # 錯誤處理
          try:
              1 / 0
          except Exception:
              log_err("中文Division error occurred") # 輸出到error.log
      

      logging.conf

      [loggers]
      keys=root,debug,info,error
      
      [handlers]
      keys=debug_handler,info_handler,error_handler
      
      [formatters]
      keys=detailed
      
      [logger_root]
      level=DEBUG
      handlers=
      
      [logger_debug]
      level=DEBUG
      handlers=debug_handler
      qualname=debug
      
      [logger_info]
      level=INFO
      handlers=info_handler
      qualname=info
      
      [logger_error]
      level=ERROR
      handlers=error_handler
      qualname=error
      
      [formatter_detailed]
      format=%(asctime)s.%(msecs)03d %(threadName)s %(levelname)-8s %(message)s
      datefmt=%Y-%m-%d %H:%M:%S
      
      [handler_debug_handler]
      level=DEBUG
      formatter=detailed
      class=handlers.RotatingFileHandler
      args=('logs/debug.log', 'a', 1048576, 5)
      
      [handler_info_handler]
      level=INFO
      formatter=detailed
      class=handlers.RotatingFileHandler
      args=('logs/info.log', 'a', 1048576, 5, 'utf-8')
      
      [handler_error_handler]
      level=ERROR
      formatter=detailed
      class=handlers.RotatingFileHandler
      args=('logs/error.log', 'a', 1048576, 5, 'utf-8')
      
      posted @ 2025-04-16 11:18  嘚惹  閱讀(31)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 高密市| 久久96热在精品国产高清| 欧洲中文字幕一区二区| 蜜臀91精品国产高清在线| 四虎国产精品永久在线| 亚洲日韩av无码| 国产精品一区二区三区日韩| 国产成人亚洲欧美二区综合| 扶绥县| 国产无遮挡猛进猛出免费软件| XXXXXHD亚洲日本HD| 枣庄市| 亚洲中文无码永久免费| FC2免费人成在线视频| 重口SM一区二区三区视频| 欧洲美熟女乱又伦免费视频| 中文字幕精品亚洲人成在线 | 亚洲欧美成人a∨观看| 黑人av无码一区| 国内精品久久久久电影院| 亚洲性夜夜天天天| 亚洲日韩性欧美中文字幕| 国产伦精品一区二区三区| 无码一区二区三区久久精品| 国产又色又爽又黄的网站免费| 国产美女永久免费无遮挡| 国产sm重味一区二区三区| 人人妻人人狠人人爽| 成人一区二区三区在线午夜| 色综合视频一区二区三区| 国产精品人成视频免费播放| 国产精品揄拍一区二区久久| 全免费A级毛片免费看无码| 国产精品香港三级国产av| 日韩一区二区三区精品区| 一区二区三区AV波多野结衣| 在线看国产精品自拍内射| 国产91精品一区二区蜜臀| 真实单亲乱l仑对白视频| 内射视频福利在线观看| 国产高在线精品亚洲三区|