o
    i7+                  	   @   sh  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mZ ddl	m
Z
 ddlmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZ ddlmZmZ ej dZdZde fddZ!deeddeedddde! r~dndej"ej#diddgej"ddidddZ$edede%deddfd d!Z&edede%deddfd"d#Z'edede%deddfd$d%Z(ed& Z)d'e)de fd(d)Z*G d*d+ d+eZ+e+j,e+j-e+j.d,Z/dAd-d.Z0d/e%de+fd0d1Z1e
ej2fd2e3dededf fd3d4Z4d5eded6 fd7d8Z5e0  ej"d9kre6d:7ej8 e1e9Z:dBd;d<Z;dBd=e%d>e%dB fd?d@Z<dS )CzLogging configuration for vLLM.    N)	GeneratorHashable)contextmanager)	lru_cachepartial)Logger)
dictConfig)path)
MethodType)AnyLiteralcast)ColoredFormatterNewLineFormatterz?%(levelname)s %(asctime)s [%(fileinfo)s:%(lineno)d] %(message)sz%m-%d %H:%M:%Sreturnc                   C   sf   t jst jdkr
dS t jdkrdS t jdkr!ttjdo tj S t jdkr1ttjdo0tj S dS )N0F1Tzext://sys.stdoutisattyzext://sys.stderr)	envsNO_COLORVLLM_LOGGING_COLORVLLM_LOGGING_STREAMhasattrsysstdoutr   stderr r   r   A/home/ubuntu/vllm_env/lib/python3.10/site-packages/vllm/logger.py
_use_color   s   


r   #vllm.logging_utils.NewLineFormatter)classdatefmtformatz#vllm.logging_utils.ColoredFormatter)vllm
vllm_colorr#   zlogging.StreamHandlerr$   )r    	formatterlevelstreamF)handlersr&   	propagate   )
formattersr(   loggersversiondisable_existing_loggersloggermsgargsc                 G      | j |g|R ddi d S N
stacklevel   )debugr/   r0   r1   r   r   r   _print_debug_onceK      r8   c                 G   r2   r3   )infor7   r   r   r   _print_info_onceQ   r9   r;   c                 G   r2   r3   )warningr7   r   r   r   _print_warning_onceW   r9   r=   )processgloballocalscopec                 C   s8   | dkrddl m} | S | dkrddl m} | S dS )z$Decide whether to log based on scoper?   r   )is_global_first_rankr@   )is_local_first_rankT)vllm.distributed.parallel_staterB   rC   )rA   rB   rC   r   r   r   _should_log_with_scope`   s   rE   c                	   @   sp   e Zd ZdZdddedededdfd	d
ZdddedededdfddZdddedededdfddZ	dS )_VllmLoggera
  
    Note:
        This class is just to provide type information.
        We actually patch the methods directly on the [`logging.Logger`][]
        instance to avoid conflicting with other libraries such as
        `intel_extension_for_pytorch.utils._logger`.
    r>   )rA   r0   r1   rA   r   Nc                G   "   t |sdS t| |g|R   dS )z~
        As [`debug`][logging.Logger.debug], but subsequent calls with
        the same message are silently dropped.
        N)rE   r8   selfr0   rA   r1   r   r   r   
debug_oncew      z_VllmLogger.debug_oncec                G   rG   )z|
        As [`info`][logging.Logger.info], but subsequent calls with
        the same message are silently dropped.
        N)rE   r;   rH   r   r   r   	info_once   s   z_VllmLogger.info_oncec                G   rG   )z
        As [`warning`][logging.Logger.warning], but subsequent calls with
        the same message are silently dropped.
        N)rE   r=   rH   r   r   r   warning_once   rK   z_VllmLogger.warning_once)
__name__
__module____qualname____doc__strr   LogScoperJ   rL   rM   r   r   r   r   rF   n   s.    	
 
rF   )rJ   rL   rM   c                  C   s8  t tt ttf tB f  } tjstjrtdtjr@t} | d d }tj|d< tj	|d< t
 r1dnd|d< | d d }tj|d< tjr|ttjsOtd	tjttjd
d}t| }W d    n1 shw   Y  t|t sztdt|j|} | di  D ]}|ddkrd|d< q| rt|  d S d S )NzVLLM_CONFIGURE_LOGGING evaluated to false, but VLLM_LOGGING_CONFIG_PATH was given. VLLM_LOGGING_CONFIG_PATH implies VLLM_CONFIGURE_LOGGING. Please enable VLLM_CONFIGURE_LOGGING or unset VLLM_LOGGING_CONFIG_PATH.r(   r#   r&   r'   r$   r%   r,   z6Could not load logging config. File does not exist: %szutf-8)encodingz.Invalid logging config. Expected dict, got %s.r+   r    zvllm.logging.NewLineFormatterr   )dictrR   r   r   VLLM_CONFIGURE_LOGGINGVLLM_LOGGING_CONFIG_PATHRuntimeErrorDEFAULT_LOGGING_CONFIGVLLM_LOGGING_LEVELr   r   r	   existsopenjsonloadsread
isinstance
ValueErrortyperN   getvaluesr   )logging_configvllm_handlervllm_loggersfilecustom_configr%   r   r   r   _configure_vllm_root_logger   sF   



rj   namec                 C   s8   t | }t D ]\}}t||t|| q	tt|S )zThe main purpose of this function is to ensure that loggers are
    retrieved in such a way that we can be sure the root vllm logger has
    already been configured.)logging	getLogger_METHODS_TO_PATCHitemssetattrr
   r   rF   )rk   r/   method_namemethodr   r   r   init_logger   s   

rs   r&   c                 c   s*    t jjj}t |  d V  t | d S N)rl   rootmanagerdisable)r&   current_levelr   r   r   suppress_logging   s
   

ry   lgr)colornewlineNc                 C   sf   | d ur1| j r*t| j dkr*| j d jdkr*| j d j}t|tr#dS t|tr*dS | j} | d usd S )Nr*   r   r#   r{   r|   )r(   lenrk   r%   r`   r   r   parent)rz   r%   r   r   r   current_formatter_type   s   $

r   INFOhttpxc                 C   s.  |dv r|j j}|j}|j j}||sd S zq|j}|d ur*|j j}	|j}
|j j}nd}	d}
d}t| dI}tj 	d}|dkr]|
| d| d| d	| d
| d|	 d	|
 d n|
| d| d| d	| d| d|	 d	|
 d W d    n1 sw   Y  W n	 ty   Y nw tt| |S )N)callr    r   az%Y-%m-%d %H:%M:%S.%fr   z	 Call to z in :z from 
z Return from z to )f_codeco_filenamef_linenoco_name
startswithf_backr\   datetimenowstrftimewrite	NameErrorr   _trace_calls)log_pathroot_dirframeeventargfilenamelineno	func_name
last_framelast_filenamelast_linenolast_func_nameftsr   r   r   r      sn   

r   log_file_pathr   c                 C   sH   t d t d|  |du rtjtjt}tt	t
| | dS )a  
    Enable tracing of every function call in code under `root_dir`.
    This is useful for debugging hangs or crashes.
    `log_file_path` is the path to the log file.
    `root_dir` is the root directory of the code to trace. If None, it is the
    vllm root directory.

    Note that this call is thread-level, any threads calling this function
    will have the trace enabled. Other threads will not be affected.
    zVLLM_TRACE_FUNCTION is enabled. It will record every function executed by Python. This will slow down the code. It is suggested to be used for debugging hang or crashes only.zTrace frame log is saved to %sN)r/   r<   r:   osr	   dirname__file__r   settracer   r   )r   r   r   r   r   enable_trace_function_call(  s   r   )r   Nrt   )=rQ   r   r]   rl   r   r   collections.abcr   r   
contextlibr   	functoolsr   r   r   logging.configr   r	   typesr
   typingr   r   r   	vllm.envsr   vllm.logging_utilsr   r   VLLM_LOGGING_PREFIX_FORMAT_DATE_FORMATboolr   rZ   r   rY   rR   r8   r;   r=   rS   rE   rF   rJ   rL   rM   rn   rj   rs   r   intry   r   rm   setLevelWARNINGrN   r/   r   r   r   r   r   r   <module>   s   

"+
0$
+