
    iQ                         d Z ddlZddlZddlZddlZddlZddlmZ ddlm	Z	 ddl
Z
ddlmZ ddlmZ  G d dee      Z G d	 d
      ZdadadefdZddedefdZy)z<Structured logging utilities for the DevAll workflow system.    N)Enum)Path)LogLevel)MACExceptionc                   (    e Zd ZdZdZdZdZdZdZdZ	y)	LogTypezTypes of structured logs.requestresponseerrorworkflowsecurityperformanceN)
__name__
__module____qualname____doc__REQUESTRESPONSEERRORWORKFLOWSECURITYPERFORMANCE     D/Users/bowang/.openclaw/workspace/ChatDev/utils/structured_logger.pyr   r      s#    #GHEHHKr   r   c                      e Zd ZdZej
                  dfdededefdZdedefdZ	d	ede
fd
Z	 d%ded	edededef
dZ	 d%ded	ededefdZdej                  fdededefdZdej                  fdededefdZdej                  fdededefdZdej&                  fdededefdZdej&                  fdededefdZ	 	 d&dedededdfdZd%dededefdZd%dededefdZd%dededefdZd%ded edefd!Z	 d%d"edededefd#Zdefd$Zy)'StructuredLoggerzIA structured logger that outputs JSON format logs with consistent fields.Nname	log_levellog_filec                    || _         || _        t        j                  |      | _        | j                  j                  | j                  |             t        j                  d      }|r>t        |      }|j                  j                  dd       t        j                  |      }n#t        j                  t        j                        }|j                  |       | j                  j!                  |       d | _        y )Nz%(message)sT)parentsexist_ok)r   r   logging	getLoggerloggersetLevel_get_logging_level	Formatterr   parentmkdirFileHandlerStreamHandlersysstdoutsetFormatter
addHandlercorrelation_id)selfr   r   r    	formatterlog_pathhandlers          r   __init__zStructuredLogger.__init__   s    	"''-T44Y?@ %%m4	 H~HOO!!$!>))(3G++CJJ7GY'w' #r   returnc           
      r   t         j                  t        j                  t         j                  t        j                  t         j                  t        j                  t         j
                  t        j
                  t         j                  t        j                  i}|j                  |t        j                        S )z.Convert LogLevel enum to logging module level.)r   DEBUGr$   INFOWARNINGr   CRITICALget)r3   r   	level_maps      r   r(   z#StructuredLogger._get_logging_level5   si     NNGMMMM7<<gooNNGMMw//
	 }}Y55r   levelc                      || j                   k\  S )z@Check if a log level should be logged based on configured level.)r   )r3   r@   s     r   _should_logzStructuredLogger._should_log@   s    &&r   log_typemessager2   c                     t         j                   j                  t         j                        |j                  |j                  | j                  ||xs | j
                  d|}t        j                  |t              S )z Format log entry as JSON string.)	timestamprC   r@   r&   rD   r2   )default)	datetimenowUTCvaluer   r2   jsondumpsstr)r3   rC   r@   rD   r2   kwargs	log_entrys          r   _format_logzStructuredLogger._format_logD   sf     "**..x||< [[ii,C0C0C
 
	 zz)S11r   c                     | j                  |      rD | j                  ||||fi |}| j                  |      }| j                  j	                  ||       yy)zInternal logging method.N)rB   rQ   r(   r&   log)r3   rC   r@   rD   r2   rO   formatted_logr   s           r   _logzStructuredLogger._logR   sW     E",D,,Xug~`Y_`M//6IKKOOI}5 #r   c                 L     | j                   |t        j                  ||fi | y)zLog information.N)rU   r   r;   r3   rD   r2   rC   rO   s        r   infozStructuredLogger.infoZ   s    		(HMM7NMfMr   c                 L     | j                   |t        j                  ||fi | y)zLog debug information.N)rU   r   r:   rW   s        r   debugzStructuredLogger.debug^       		(HNNG^NvNr   c                 L     | j                   |t        j                  ||fi | y)zLog warning.N)rU   r   r<   rW   s        r   warningzStructuredLogger.warningb   s!    		(H,,g~PPr   c                 L     | j                   |t        j                  ||fi | y)zLog error with details.N)rU   r   r   rW   s        r   r   zStructuredLogger.errorf   r[   r   c                 L     | j                   |t        j                  ||fi | y)zLog critical error.N)rU   r   r=   rW   s        r   criticalzStructuredLogger.criticalj   s!    		(H--wQ&Qr   	exceptionc                 J   |t        |      }t        |      j                  t        |      t        j                         d}t        |t              r|j                  |d<   |j                  |d<    | j                  t        j                  t        j                  ||fd|i| y)z$Log an exception with its traceback.N)exception_typeexception_message	traceback
error_codeexception_detailsra   )rN   typer   re   
format_exc
isinstancer   rf   detailsrU   r   r   r   )r3   ra   rD   r2   rO   exception_infos         r   log_exceptionzStructuredLogger.log_exceptionn   s     ?)nG #9o66!$Y"--/
 i.+4+?+?N<(2;2C2CN./		'--. 	5)	5-3	5r   methodurlc                 z     | j                   t        j                  t        j                  d| d| |f||d| y)zLog incoming request.z	Incoming z request to )rn   ro   N)rU   r   r   r   r;   )r3   rn   ro   r2   rO   s        r   log_requestzStructuredLogger.log_request   sE    		'//8==IfX\RUQV2W	C(.C	C;A	Cr   status_coderesponse_timec           	      ~     | j                   t        j                  t        j                  d| d|dd|f||d| y)zLog outgoing response.zResponse with status z in .3fs)rr   rs   N)rU   r   r   r   r;   )r3   rr   rs   r2   rO   s        r   log_responsezStructuredLogger.log_response   sK    		'""HMM(T-9LAN	a-8	aY_	ar   
event_typec                 l     | j                   t        j                  t        j                  ||fd|i| y)zLog security-related events.rx   N)rU   r   r   r   r<   )r3   rx   rD   r2   rO   s        r   log_security_eventz#StructuredLogger.log_security_event   s4    		'""H$4$4g~ 	2&	2*0	2r   	operationdurationc           	      ~     | j                   t        j                  t        j                  d| d|dd|f||d| y)zLog performance metrics.z
Operation z completed in ru   rv   )r{   r|   N)rU   r   r   r   r;   )r3   r{   r|   r2   rO   s        r   log_performancez StructuredLogger.log_performance   sJ    		'%%x}}i[xnAF	S+4x	SKQ	Sr   workflow_idc                 n     | j                   t        j                  t        j                  ||f||d| y)zLog workflow-specific events.)r   rx   N)rU   r   r   r   r;   )r3   r   rx   rD   r2   rO   s         r   log_workflow_eventz#StructuredLogger.log_workflow_event   s9     			'""HMM7N 	K(Z	KCI	Kr   c                     || _         y)z0Set the correlation ID for this logger instance.N)r2   )r3   r2   s     r   set_correlation_idz#StructuredLogger.set_correlation_id   s
    ,r   )N)NN)r   r   r   r   r   r;   rN   r7   intr(   boolrB   r   rQ   rU   r   rX   rZ   r]   r   r   r`   	Exceptionrm   rq   floatrw   rz   r~   r   r   r   r   r   r   r      s^   S8@W[ #S #X #QT #0	6H 	6 	6' 'd '
 +/2G 2H 2s 2$'2=@2 $(6W 6X 6 6 6 8<QXQaQa NC N Nw N 9=RYRbRb OS O# O O ;?T[TdTd Qs QC Q' Q 9=RYR_R_ OS O# O O <@U\UbUb R RS R7 R BF,05y 53 5&)5?C5(C# CC C C
a aE aSV a2S 23 2PS 2
S S Ss S 15Kc Ks KS K*-K- -r   r   r8   c                      t         Pt        j                  dd      } t        j                  dd      j                         }t        |   }t        d||       a t         S )z&Get the global server logger instance.SERVER_LOG_FILEzlogs/server.log	LOG_LEVELr;   server)_server_loggerosgetenvupperr   r   )r    log_level_strr   s      r   get_server_loggerr      sS     99.0AB		+v6<<>]+	)(IxHr   r   c                     t         Tt        j                  dd|  d      }t        j                  dd      j                         }t        |   }t        | ||      a t         S )zGet a workflow logger instance.WORKFLOW_LOG_FILEzlogs/z.logr   r;   )_workflow_loggerr   r   r   r   r   )r   r    r   r   s       r   get_workflow_loggerr      s\     990E$t2DE		+v6<<>]+	+D)XFr   )r   )r   rL   r$   r.   re   rH   enumr   pathlibr   r   entity.enumsr   utils.exceptionsr   rN   r   r   r   r   r   r   r   r   r   <module>r      so    B   
     	 ! ) c4  F- F-T  + c 3C r   