o
    ίiv                     @   s   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mZ G dd de j	Z
defddZ	ddd	d
dedB dedB defddZdS )    N)	timedelta)get_global_rankget_is_slurm_jobc                   @   s>   e Zd ZdZdd Zdd Zdd Zdefd	d
Zdd Z	dS )LogFormatterzv
    Custom logger for distributed jobs, displaying rank
    and preserving indent from the custom prefix format.
    c                 C   s    t   | _t | _t  | _d S N)time
start_timer   rankr   	show_rank)self r   ?/home/ubuntu/.local/lib/python3.10/site-packages/core/logger.py__init__   s   
zLogFormatter.__init__c                 C   sZ   t |j\}}tdt|dt|d d }tt|j| j	 d}| d| S )Nz%y-%m-%d %H:%M:%S.i@B 06d)seconds - )
mathmodfcreatedr   strftime	localtimeintr   roundr   )r   record	subsecondr   	curr_datedeltar   r   r   
formatTime   s   zLogFormatter.formatTimec                 C   s@   |  |}| jr| j d|jdd| dS |jdd| dS )Nz: z<7 r   )r   r
   r	   	levelname)r   r   fmt_timer   r   r   formatPrefix    s   
zLogFormatter.formatPrefixindentc                 C   s   |  }|dd| }|jr|js| |j|_|jrG|dd  dkr*|d | }||dd |j D  }|dd  dkrG|d d }|jrz|dd  dkrX|d | }| |j}||dd | D  }|dd  dkrz|d d }|S )N
c                 S      g | ]}|d  qS r$   r   .0lr   r   r   
<listcomp>5       z.LogFormatter.formatMessage.<locals>.<listcomp>c                 S   r&   r'   r   r(   r   r   r   r+   =   r,   )	
getMessagereplaceexc_infoexc_textformatExceptionjoin
splitlines
stack_infoformatStack)r   r   r#   content
stack_textr   r   r   formatMessage'   s*   zLogFormatter.formatMessagec                 C   s*   |  |}dt| }| ||}|| S )Nr   )r"   lenr8   )r   r   prefixr#   r6   r   r   r   formatC   s   
zLogFormatter.formatN)
__name__
__module____qualname____doc__r   r   r"   strr8   r;   r   r   r   r   r      s    	r   	log_levelc                 C   st   t  }|  }zt| }W n	 ty   Y nw z|| W d S  ty9   |d|  d |t j Y d S w )NzFailed to set logging level to z, using default 'NOTSET')	logging	getLoggerupperr   
ValueErrorsetLevel	ExceptionwarningNOTSET)rA   loggerlevelr   r   r   set_root_log_levelJ   s   
rL   rI   )namerK   log_filerM   rK   c                C   s   t | t|}ttj}|tj |t	  ttj
}|tj |t	  |j  |j| |j| | durdt dkrft| d}|tj |t	  t }|| dS dS dS )z
    Setup logging.

    Args:
        log_file: A file name to save file logs to.
        name: The name of the logger to configure, by default the root logger.
        level: The logging level to use.
    Nr   a)rL   rB   rC   StreamHandlersysstdoutrF   rI   setFormatterr   stderrWARNINGhandlersclearappendr   FileHandler
addHandler)rN   rM   rK   rJ   stdout_handlerstderr_handlerfile_handlerr   r   r   init_loggerZ   s$   

r^   r   )rB   r   rQ   r   datetimer   core.distributedr   r   	Formatterr   r@   rL   r^   r   r   r   r   <module>   s&   >