eeuuia commited on
Commit
caaa41c
·
verified ·
1 Parent(s): 797173a

Update utils/debug_utils.py

Browse files
Files changed (1) hide show
  1. utils/debug_utils.py +33 -31
utils/debug_utils.py CHANGED
@@ -1,33 +1,51 @@
1
  # FILE: utils/debug_utils.py
2
- # DESCRIPTION: A utility for detailed function logging and debugging.
3
 
4
  import os
5
  import functools
6
  import torch
7
-
8
- # Define o nível de log. Mude para "INFO" para desativar os logs detalhados.
9
- # Você pode controlar isso com uma variável de ambiente.
10
  import logging
11
  import warnings
 
 
 
12
  warnings.filterwarnings("ignore", category=UserWarning)
13
  warnings.filterwarnings("ignore", category=FutureWarning)
14
  warnings.filterwarnings("ignore", message=".*")
15
- from huggingface_hub import logging as ll
16
- ll.set_verbosity_error()
17
- ll.set_verbosity_warning()
18
- ll.set_verbosity_info()
19
- ll.set_verbosity_debug()
 
 
 
20
 
21
- LOG_LEVEL = "DEBUG" #os.environ.get("ADUC_LOG_LEVEL", "DEBUG").upper()
22
- logging.basicConfig(level=LOG_LEVEL, format='%(message)s')
 
 
23
  logger = logging.getLogger("AducDebug")
 
 
 
 
 
 
 
 
 
 
24
 
25
- logging.basicConfig(level=logging.DEBUG)
26
- logger.setLevel(logging.DEBUG)
 
 
 
27
 
 
28
 
29
  def _format_value(value):
30
- """Formata os valores dos argumentos para uma exibição concisa e informativa."""
31
  if isinstance(value, torch.Tensor):
32
  return f"Tensor(shape={list(value.shape)}, device='{value.device}', dtype={value.dtype})"
33
  if isinstance(value, str) and len(value) > 70:
@@ -39,45 +57,29 @@ def _format_value(value):
39
  return repr(value)
40
 
41
  def log_function_io(func):
42
- """
43
- Um decorador que registra as entradas, saídas e exceções de uma função.
44
- Ele é ativado apenas se o nível de log estiver definido como DEBUG.
45
- """
46
  @functools.wraps(func)
47
  def wrapper(*args, **kwargs):
48
- # Só executa a lógica de log se o nível for DEBUG
49
  if logger.isEnabledFor(logging.DEBUG):
50
- # Obtém o nome do módulo e da função
51
  func_name = f"{func.__module__}.{func.__name__}"
52
-
53
- # Formata os argumentos de entrada
54
  args_repr = [_format_value(a) for a in args]
55
  kwargs_repr = {k: _format_value(v) for k, v in kwargs.items()}
56
  signature = ", ".join(args_repr + [f"{k}={v}" for k, v in kwargs_repr.items()])
57
 
58
- # Log de Entrada
59
  logger.debug(f"\n\n== INÍCIO: {func_name} ==========")
60
  logger.debug(f"\n -> ENTRADA: \n({signature})")
61
 
62
  try:
63
- # Executa a função original
64
  result = func(*args, **kwargs)
65
-
66
- # Formata e registra o resultado
67
  result_repr = _format_value(result)
68
  logger.debug(f"\n\n <- SAÍDA: \n{result_repr}")
69
-
70
  except Exception as e:
71
- # Registra qualquer exceção que ocorra
72
  logger.error(f"\n <-- ERRO em \n{func_name}: {e}", exc_info=True)
73
- raise # Re-lança a exceção para não alterar o comportamento do programa
74
  finally:
75
- # Log de Fim
76
  logger.debug(f"============================================\n\n")
77
 
78
  return result
79
  else:
80
- # Se o log não estiver em modo DEBUG, executa a função sem nenhum overhead.
81
  return func(*args, **kwargs)
82
 
83
  return wrapper
 
1
  # FILE: utils/debug_utils.py
2
+ # DESCRIPTION: Utility for detailed function logging with persistent file output.
3
 
4
  import os
5
  import functools
6
  import torch
 
 
 
7
  import logging
8
  import warnings
9
+ from huggingface_hub import logging as hf_logging
10
+
11
+ # --- CONFIGURAÇÃO INICIAL ---
12
  warnings.filterwarnings("ignore", category=UserWarning)
13
  warnings.filterwarnings("ignore", category=FutureWarning)
14
  warnings.filterwarnings("ignore", message=".*")
15
+ hf_logging.set_verbosity_error()
16
+
17
+ LOG_LEVEL = os.environ.get("ADUC_LOG_LEVEL", "DEBUG").upper()
18
+ # --- NOVO CAMINHO PADRONIZADO PARA O LOG DA SESSÃO ATUAL ---
19
+ LOG_DIR = "/data/logs"
20
+ LOG_FILE_PATH = os.path.join(LOG_DIR, "session.log")
21
+
22
+ # --- CONFIGURAÇÃO DO LOGGER ---
23
 
24
+ # 1. Cria o diretório de log se ele não existir
25
+ os.makedirs(LOG_DIR, exist_ok=True)
26
+
27
+ # 2. Obtém o logger principal
28
  logger = logging.getLogger("AducDebug")
29
+ logger.setLevel(LOG_LEVEL)
30
+
31
+ # 3. Evita adicionar handlers duplicados (importante em ambientes interativos)
32
+ if not logger.handlers:
33
+ # Handler para o arquivo de log persistente. 'w' para começar um novo log a cada sessão.
34
+ # O start.sh já terá movido o log antigo.
35
+ file_handler = logging.FileHandler(LOG_FILE_PATH, mode='w')
36
+ file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
37
+ file_handler.setFormatter(file_formatter)
38
+ logger.addHandler(file_handler)
39
 
40
+ # Handler para o console (terminal)
41
+ stream_handler = logging.StreamHandler()
42
+ stream_formatter = logging.Formatter('%(message)s') # Formato limpo para o terminal
43
+ stream_handler.setFormatter(stream_formatter)
44
+ logger.addHandler(stream_handler)
45
 
46
+ # --- FUNÇÕES DO DECORADOR ---
47
 
48
  def _format_value(value):
 
49
  if isinstance(value, torch.Tensor):
50
  return f"Tensor(shape={list(value.shape)}, device='{value.device}', dtype={value.dtype})"
51
  if isinstance(value, str) and len(value) > 70:
 
57
  return repr(value)
58
 
59
  def log_function_io(func):
 
 
 
 
60
  @functools.wraps(func)
61
  def wrapper(*args, **kwargs):
 
62
  if logger.isEnabledFor(logging.DEBUG):
 
63
  func_name = f"{func.__module__}.{func.__name__}"
 
 
64
  args_repr = [_format_value(a) for a in args]
65
  kwargs_repr = {k: _format_value(v) for k, v in kwargs.items()}
66
  signature = ", ".join(args_repr + [f"{k}={v}" for k, v in kwargs_repr.items()])
67
 
 
68
  logger.debug(f"\n\n== INÍCIO: {func_name} ==========")
69
  logger.debug(f"\n -> ENTRADA: \n({signature})")
70
 
71
  try:
 
72
  result = func(*args, **kwargs)
 
 
73
  result_repr = _format_value(result)
74
  logger.debug(f"\n\n <- SAÍDA: \n{result_repr}")
 
75
  except Exception as e:
 
76
  logger.error(f"\n <-- ERRO em \n{func_name}: {e}", exc_info=True)
77
+ raise
78
  finally:
 
79
  logger.debug(f"============================================\n\n")
80
 
81
  return result
82
  else:
 
83
  return func(*args, **kwargs)
84
 
85
  return wrapper