
    i                     \    d dl Z d dlZd dlZd dlmZ d dlmZ  G d d      Z G d d      Zy)    N)datetime)envc                        e Zd ZdZed        Zy)LoggingConfigu   로깅 설정 클래스c                  &   t        j                  dd      j                         } t        t        | t        j
                        }t	        j                  dd      }t	        j                         }|j                  |       |j                  dd D ]  }|j                  |        t	        j                         }|j                  |       |j                  |       |j                  |       d}t        j                  |d	       t        j                  j!                  t        j"                  j%                  |d
      ddd      }|j                  |       |j                  |       |j                  |       t        j                  j!                  t        j"                  j%                  |d      ddd      }|j                  t        j&                         |j                  |       |j                  |       t	        j                  d      j                  t        j(                         t	        j                  d      j                  t        j(                         t	        j                  d      j                  t        j(                         |S )u   로깅 설정 초기화	LOG_LEVELINFOz=%(asctime)s [%(levelname)s] %(name)s:%(lineno)d - %(message)sz%Y-%m-%d %H:%M:%S)fmtdatefmtNlogsT)exist_okz	mlink.logi      zutf-8)filenamemaxBytesbackupCountencodingz	error.logurllib3requestschromadb)r   getuppergetattrloggingr	   	Formatter	getLoggersetLevelhandlersremoveHandlerStreamHandlersetFormatter
addHandlerosmakedirsRotatingFileHandlerpathjoinERRORWARNING)		log_levelnumeric_level	formatterroot_loggerhandlerconsole_handlerlog_dirfile_handlererror_handlers	            N/home/kdj-ubuntu1/mlink_AI_Server/mlink-backend/./src/config/logging_config.pysetup_loggingzLoggingConfig.setup_logging   s   
 GGK0668	GLLA %%O'
	 '')]+ #++A.G%%g. / "//1  /$$Y// 
Gd+'';;WW\\';7%	 < 
 	m,!!),|,  ((<<WW\\';7%	 = 
 	w}}-""9-}- 	)$--goo>*%..w?*%..w?    N)__name__
__module____qualname____doc__staticmethodr3    r4   r2   r   r      s    !9 9r4   r   c                       e Zd ZdZdefdZdefdZdefdZdefdZdefdZ	dd
ededefdZ
d
edededefdZdededefdZdedededefdZy	)StructuredLoggeru.   구조화된 로깅을 위한 헬퍼 클래스namec                 8    t        j                  |      | _        y N)r   r   logger)selfr=   s     r2   __init__zStructuredLogger.__init__K   s    ''-r4   messagec                 >    | j                   j                  ||       y)u   정보 로그extraN)r@   inforA   rC   kwargss      r2   rG   zStructuredLogger.infoN   s    /r4   c                 >    | j                   j                  ||       y)u   경고 로그rE   N)r@   warningrH   s      r2   rK   zStructuredLogger.warningR   s    G62r4   c                 >    | j                   j                  ||       y)u   에러 로그rE   N)r@   errorrH   s      r2   rM   zStructuredLogger.errorV       '0r4   c                 >    | j                   j                  ||       y)u   디버그 로그rE   N)r@   debugrH   s      r2   rP   zStructuredLogger.debugZ   rN   r4   Nmethodendpointuser_idc                 @     | j                   d| d| fd|||d| y)u   API 요청 로그u   API 요청:  api_request)
event_typerQ   rR   rS   NrG   )rA   rQ   rR   rS   rI   s        r2   log_api_requestz StructuredLogger.log_api_request^   s;    		6(!H:.	
$	
 	
r4   status_coderesponse_timec                 R     | j                   d| d| d| d|dd	fd||||d| y	)
u   API 응답 로그u   API 응답: rU    -  (.3fs)api_response)rW   rQ   rR   rZ   r[   NrX   )rA   rQ   rR   rZ   r[   rI   s         r2   log_api_responsez!StructuredLogger.log_api_responsei   sP    		6(!H:SRc?RRTU	
%#'	
 	
r4   user_messageai_response
session_idc           	      X     | j                   	 dd|t        |      t        |      d| y)u   챗봇 상호작용 로그chatbot_interaction)rW   re   user_message_lengthai_response_lengthN)u   챗봇 상호작용)rG   len)rA   rc   rd   re   rI   s        r2   log_chatbot_interactionz(StructuredLogger.log_chatbot_interactionu   s8    		!	
,! #L 1";/	
 	
r4   servicec                 R     | j                   d| d| d| d|dd	fd||||d| y	)
u   외부 API 호출 로그u   외부 API 호출: rU   r]   r^   r_   r`   external_api_call)rW   rl   rR   rZ   r[   NrX   )rA   rl   rR   rZ   r[   rI   s         r2   log_external_api_callz&StructuredLogger.log_external_api_call   sQ    		!'!H:SRVYGZZ\]	
*#'	
 	
r4   r?   )r5   r6   r7   r8   strrB   rG   rK   rM   rP   rY   intfloatrb   rk   ro   r:   r4   r2   r<   r<   H   s    8.S .0C 03s 31S 11S 1	
c 	
S 	
3 	


s 

c 

 

\a 

	
C 	
c 	
WZ 	


S 

C 

c 

bg 

r4   r<   )r"   r   logging.handlersr   src.config.env_loaderr   r   r<   r:   r4   r2   <module>ru      s+    	    %= =@B
 B
r4   