11import logging
22import os
33import sys
4+ from contextlib import contextmanager
45
56# ANSI escape codes for colors
67COLOR_CODES = {
@@ -20,19 +21,16 @@ def format(self, record):
2021 return f"{ color } { message } { RESET_CODE } "
2122
2223
23- def get_logger (user_report_file , admin_log_file , name = "justicier" , debug_mode = False ):
24- os .makedirs (os .path .dirname (user_report_file ), exist_ok = True )
25- os .makedirs (os .path .dirname (admin_log_file ), exist_ok = True )
26-
24+ def get_logger (user_report_file , admin_log_file , supervisor_log_file , name = "justicier" , debug_mode = False ):
2725 logger = logging .getLogger (name )
2826 logger .setLevel (logging .DEBUG )
2927
3028 if logger .handlers :
3129 return logger # Prevent re-adding handlers
3230
3331 # Formatters
34- plain_formatter = logging .Formatter ('%(asctime)s - %(levelname)s - %(message)s' )
35- color_formatter = ColorFormatter ('%(asctime)s - %(levelname)s - %(message)s' )
32+ plain_formatter = logging .Formatter ('%(asctime)s - %(process_name)s - %( levelname)s - %(message)s' )
33+ color_formatter = ColorFormatter ('%(asctime)s - %(process_name)s - %( levelname)s - %(message)s' )
3634
3735 # User log (INFO+)
3836 user_handler = logging .FileHandler (user_report_file )
@@ -49,7 +47,57 @@ def get_logger(user_report_file, admin_log_file, name="justicier", debug_mode=Fa
4947 console_handler .setLevel (logging .DEBUG if debug_mode else logging .WARNING )
5048 console_handler .setFormatter (color_formatter )
5149
52- for handler in [user_handler , admin_handler , console_handler ]:
50+ # Supervisor log
51+ supervisor_handler = logging .FileHandler (supervisor_log_file )
52+ supervisor_handler .setLevel (logging .INFO )
53+ supervisor_handler .setFormatter (color_formatter )
54+
55+ for handler in [user_handler , admin_handler , console_handler , supervisor_handler ]:
5356 logger .addHandler (handler )
5457
5558 return logger
59+
60+
61+ def get_raw_logger (user_report_file , admin_log_file , supervisor_log_file , name = "raw" , debug_mode = False ):
62+ logger = logging .getLogger (name )
63+ logger .setLevel (logging .DEBUG )
64+
65+ if logger .handlers :
66+ return logger # Prevent re-adding handlers
67+
68+ # User log (INFO+)
69+ user_handler = logging .FileHandler (user_report_file )
70+ user_handler .setLevel (logging .INFO )
71+ user_handler .setFormatter (None )
72+
73+ # Admin/system log (DEBUG+ if debug_mode, else ERROR+)
74+ admin_handler = logging .FileHandler (admin_log_file )
75+ admin_handler .setLevel (logging .DEBUG if debug_mode else logging .ERROR )
76+ admin_handler .setFormatter (None )
77+
78+ # Console log (DEBUG+ if debug_mode, else WARNING+), with colors
79+ console_handler = logging .StreamHandler (sys .stdout )
80+ console_handler .setLevel (logging .DEBUG if debug_mode else logging .WARNING )
81+ console_handler .setFormatter (None )
82+
83+ # Supervisor log
84+ supervisor_handler = logging .FileHandler (supervisor_log_file )
85+ supervisor_handler .setLevel (logging .INFO )
86+ supervisor_handler .setFormatter (None )
87+
88+ for handler in [user_handler , admin_handler , console_handler , supervisor_handler ]:
89+ logger .addHandler (handler )
90+
91+ return logger
92+
93+
94+ def get_process_logger (base_logger , process_name ):
95+ return logging .LoggerAdapter (base_logger , {'process_name' : process_name })
96+
97+
98+ def unformatted_logger (logger ):
99+ for h in logger .handlers :
100+ h .setFormatter (None )
101+ return logger
102+
103+
0 commit comments