U
    bhC                     @  s  d Z ddlm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mZmZ ddlmZ dd	lmZ e
rdd
lmZ dZeejZeej edej eejd ejdZddddZdd Zdd Z dddZ!G dd dZ"G dd de"Z#dddZ$dS ) zLogging Utilities.    )annotationsN)WatchedFileHandler)TYPE_CHECKING   )	safe_reprsafe_strmaybe_evaluate)cached_property)Logger)LogMixin
LOG_LEVELSget_loglevelsetup_loggingFATALDISABLE_TRACEBACKSzstr | Loggerloggerc                 C  s,   t | trt| } | js(| t  | S )zGet logger by name.)
isinstancestrlogging	getLoggerhandlers
addHandlerNullHandlerr    r   -/tmp/pip-unpacked-wheel-earovzxb/kombu/log.py
get_logger   s
    

r   c                 C  s   t | trt|  S | S )zGet loglevel by name.)r   r   r   )levelr   r   r   r   %   s    
r   c                 c  sF   |  d}t|dd  D ]&\}}|r2||d  s6d n|d V  qd S )N%r   r   )split	enumerate)fmtpartsier   r   r   naive_format_parts,   s    
r&   c                 c  sP   |st tdn|}tt| D ],\}}||}|r@||| n|| V  qd S )N)sr)r   r   r!   r&   get)r"   argsfiltersindextypeZfiltr   r   r   safeify_format2   s    
r.   c                   @  sx   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zedd Zedd ZdS )r   z.Mixin that adds severity methods to any class.c                 O  s   | j tjf||S N)logr   DEBUGselfr*   kwargsr   r   r   debug<   s    zLogMixin.debugc                 O  s   | j tjf||S r/   )r0   r   INFOr2   r   r   r   info?   s    zLogMixin.infoc                 O  s   | j tjf||S r/   )r0   r   WARNr2   r   r   r   warnB   s    zLogMixin.warnc                 O  s    | dd | jtjf||S Nexc_infoT)
setdefaultr0   r   ERRORr2   r   r   r   errorE   s    zLogMixin.errorc                 O  s    | dd | jtjf||S r:   )r<   r0   r   CRITICALr2   r   r   r   criticalI   s    zLogMixin.criticalc                 C  s   | j  d| S )Nz - )logger_name)r3   textr   r   r   annotateM   s    zLogMixin.annotatec              	   O  s   t r|dd  | j|r| jj}t|dkrt|d trdd |dd  D }||| |d 	ddft
t|d ||S | jj|| dtt|f|S d S )	Nr;   r   r   c                 S  s   g | ]}t |qS r   r   ).0argr   r   r   
<listcomp>V   s     z LogMixin.log.<locals>.<listcomp>z%rz%s )r   popr   isEnabledForr0   lenr   r   rC   replacelistr.   joinmapr   )r3   Zseverityr*   r4   r0   expandr   r   r   r0   P   s&     zLogMixin.logc                 C  s
   t | jS r/   )r   rA   r3   r   r   r   r   _   s    zLogMixin.get_loggerc                 C  s   | j | |S r/   )r   rI   r   r3   r   r   r   r   is_enabled_forb   s    zLogMixin.is_enabled_forc                 C  s   t |tjst| S |S r/   )r   numbersIntegralr   rQ   r   r   r   r   e   s    zLogMixin.get_loglevelc                 C  s   |   S r/   )r   rP   r   r   r   r   j   s    zLogMixin.loggerc                 C  s   | j jS r/   )	__class____name__rP   r   r   r   rA   n   s    zLogMixin.logger_nameN)rV   
__module____qualname____doc__r5   r7   r9   r>   r@   rC   r0   r   rR   r   r
   r   propertyrA   r   r   r   r   r   9   s   
r   c                      s2   e Zd ZdddZ fddZedd Z  ZS )	LogNc                 C  s   || _ || _d S r/   )_logger_name_logger)r3   namer   r   r   r   __init__u   s    zLog.__init__c                   s   | j r| j S t  S r/   )r]   superr   rP   rU   r   r   r   y   s    zLog.get_loggerc                 C  s   | j S r/   )r\   rP   r   r   r   rA   ~   s    zLog.logger_name)N)rV   rW   rX   r_   r   rZ   rA   __classcell__r   r   ra   r   r[   s   s   
r[   c                 C  s^   t  }t| pd} |r|ntj}|jsZt|dr>t |}nt|}|	| |
|  |S )zSetup logging.r=   write)r   r   r   sys
__stderr__r   hasattrStreamHandlerr   r   setLevel)Zloglevellogfiler   handlerr   r   r   r      s    


r   )N)NN)%rY   
__future__r   r   rS   osrd   logging.handlersr   typingr   Zutils.encodingr   r   Zutils.functionalr	   Zutils.objectsr
   r   __all__dict_nameToLevelr   update_levelToNamer<   r   environr)   r   r   r   r&   r.   r   r[   r   r   r   r   r   <module>   s2   
	
: