
    #i                        S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJrJ	r	J
r
  SSKJr   " S S\R                  5      r " S	 S
\R                  5      r     S S\S\S\S\
\   S\S\R$                  4S jjrS\S\R$                  4S jrS\R$                  S\S\4S jr S!S\R$                  S\S\\\	4   S\
\   4S jjr\" SSSSS9rg)"z
Logging configuration for the RAG system.

This module provides structured logging capabilities with different log levels,
JSON formatting for production, and configurable outputs.
    N)datetime)Path)DictAnyOptional)BASE_DIRc                   >    \ rS rSrSrS\R                  S\4S jrSr	g)JSONFormatter   z&JSON formatter for structured logging.recordreturnc                    [         R                  " UR                  5      R                  5       UR                  UR
                  UR                  5       UR                  UR                  UR                  S.nUR                  (       a  U R                  UR                  5      US'   [        US5      (       a  UR                  UR                  5        [        R                   " USS9$ )N)	timestamplevelloggermessagemodulefunctionline	exceptionextra_fieldsF)ensure_ascii)r   fromtimestampcreated	isoformat	levelnamename
getMessager   funcNamelinenoexc_infoformatExceptionhasattrupdater   jsondumps)selfr   	log_entrys      ;/var/www/html/leadgen/backtest/airagagent/logging_config.pyformatJSONFormatter.format   s    !//?IIK%%kk((*mmMM
	 ??%)%9%9&//%JIk" 6>**V001zz)%88     N
__name__
__module____qualname____firstlineno____doc__logging	LogRecordstrr*   __static_attributes__r-   r,   r)   r
   r
      s    09W.. 93 9r,   r
   c                   >    \ rS rSrSrS\R                  S\4S jrSr	g)ConsoleFormatter*   z!Human-readable console formatter.r   r   c                 B   [         R                  " UR                  5      R                  S5      nSUR                   S3nSUR
                   S3nUR                  5       nU SU SU SU 3nUR                  (       a!  USU R                  UR                  5       3-  nU$ )Nz%Y-%m-%d %H:%M:%S[] 
)	r   r   r   strftimer   r   r   r!   r"   )r'   r   r   r   r   r   	formatteds          r)   r*   ConsoleFormatter.format-   s    **6>>:CCDWX	F$$%Q'V]]O1%##% k5'6(!G9=	 ??2d226??CDEEIr,   r-   Nr.   r-   r,   r)   r9   r9   *   s    +W.. 3 r,   r9   INFOTFr   log_to_filelog_to_consolelog_dirjson_formatr   c                 @   Uc	  [         S-  nUR                  SSS9  [        [        U R	                  5       [        R
                  5      n[        R                  " 5       nUR                  U5        UR                  SS  H  nUR                  U5        M     [        5       n[        5       n	U(       aW  [        R                  " [        R                  5      n
U
R                  U5        U
R                  U5        UR!                  U
5        U(       Ga  US["        R$                  " 5       R'                  S5       S3-  n[        R(                  " USS	9nUR                  U5        U(       a  UR                  U	5        OUR                  U5        UR!                  U5        US
["        R$                  " 5       R'                  S5       S3-  n[        R(                  " USS	9nUR                  [        R*                  5        UR                  U5        UR!                  U5        U$ )a  
Set up logging configuration for the RAG system.

Args:
    level: Logging level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
    log_to_file: Whether to log to file
    log_to_console: Whether to log to console
    log_dir: Directory for log files (defaults to BASE_DIR/logs)
    json_format: Whether to use JSON formatting for file logs

Returns:
    Root logger configured with the specified settings
NlogsT)parentsexist_okrag_system_z%Y%m%dz.logzutf-8)encodingrag_system_errors_)r   mkdirgetattrr4   upperrC   	getLoggersetLevelhandlersremoveHandlerr9   r
   StreamHandlersysstdoutsetFormatter
addHandlerr   nowr@   FileHandlerWARNING)r   rD   rE   rF   rG   numeric_levelr   handlerconsole_formatterjson_formatterconsole_handlerlog_filefile_handlererror_log_fileerror_handlers                  r)   setup_loggingrg   <   s   ( V# MM$M. GU[[]GLLAM  F
OOM" ??1%W% & )*"_N !//

;  /$$%67/* {8<<>+B+B8+L*MTRR**8gFm,%%n5%%&78,' !%78O8OPX8Y7ZZ^#__++NWMw/""#45-(Mr,   r   c                 .    [         R                  " U 5      $ )z
Get a logger instance for a specific module.

Args:
    name: Logger name (usually __name__)

Returns:
    Configured logger instance
)r4   rR   )r   s    r)   
get_loggerri      s     T""r,   r   	operationdurationc                 @    U R                  SU SUS S3SXS.UE0S9  g)	zLog performance metrics.zPerformance: z completed in z.3fsr   )rj   rk   )extraN)info)r   rj   rk   r   s       r)   log_performancerp      s8    
KK
	{.#a@Y]P\]^  r,   errorcontextr   c           	          Uc  SUR                   R                   3nU R                  UUSUR                   R                  [        U5      S.UE0S9  g)z1Log an error with additional context information.NzError occurred: r   )
error_typeerror_message)r!   rn   )	__class__r/   rq   r6   )r   rq   rr   r   s       r)   log_error_with_contextrw      sb     $U__%=%=$>?
LL#oo66!$U 
  
r,   )r   rD   rE   rG   )rC   TTNF)N)r3   r4   r%   rW   r   pathlibr   typingr   r   r   airagagent.configr   	Formatterr
   r9   r6   boolLoggerrg   ri   floatrp   	Exceptionrw   default_loggerr-   r,   r)   <module>r      s1     
   & & &9G%% 92w(( & "EEE E d^	E
 E ^^EP
#S 
#W^^ 
#GNN s e  "	NN #s(^ c]	0 
	r,   