o
    f3                     @   s>  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m	Z	 ddlm
Z
 G dd dZG d	d
 d
Zdd Ze Zdd ZG dd dZG dd deZG dd dZG dd deZG dd deZG dd dZG dd dZG dd deZd+dd Zd!Zefd"d#Zd$d% Zd&d' Zd,d)d*ZdS )-z
Logger implementation loosely modeled on PEP 282.  We don't use the
PEP 282 logger implementation in the stdlib ('logging') because it's
idiosyncratic and a bit slow for our purposes (we don't use threads).
    Nsyslog)long)is_text_stream)	as_stringc                   @   s(   e Zd ZdZdZdZdZdZdZdZ	dS )	LevelsByName2   (         
         N)
__name__
__module____qualname__CRITERROWARNINFODEBGTRACBLAT r   r   E/var/www/html/venv/lib/python3.10/site-packages/supervisor/loggers.pyr      s    r   c                   @   s6   e Zd ZejZejZejZ	ej
ZejZejZejZdS )LevelsByDescriptionN)r   r   r   r   r   criticalr   errorr   warnr   infor   debugr   tracer   blatherr   r   r   r   r      s    
r   c                  C   s.   i } t j D ]\}}|ds|| |< q| S )N_)r   __dict__items
startswith)bynumbernamenumberr   r   r   _levelNumbers'   s   
r*   c                 C   s   t t| d }|S N)getattrr   )descriptionnumr   r   r   getLevelNumByDescription0   s   r/   c                   @   sP   e Zd ZdZejZdddZdd Zdd Z	d	d
 Z
dd Zdd Zdd ZdS )Handler%(message)sNc                 C   s   || _ d| _d S NF)streamclosed)selfr3   r   r   r   __init__8      
zHandler.__init__c                 C   
   || _ d S r+   )fmt)r5   r9   r   r   r   	setFormat<      
zHandler.setFormatc                 C   r8   r+   level)r5   r=   r   r   r   setLevel?   r;   zHandler.setLevelc              
   C   sJ   z| j   W d S  ty$ } z|jd tjkr W Y d }~d S d }~ww Nr   )r3   flushIOErrorargserrnoEPIPEr5   whyr   r   r   r@   B   s   zHandler.flushc                 C   sX   | j s*t| jdr z| j }W n	 ty   Y nw |dk r d S | j  d| _ d S d S )Nfilenor   T)r4   hasattrr3   rG   rA   close)r5   fdr   r   r   rI   J   s   

zHandler.closec                 C   s   zO| j dkot|jto|j p|jdd ik}t| j }|r#|j}n| j |  }|r1|d}z| j	| W n t
yH   | j	| Y nw |   W d S    |   Y d S )Nr1   exc_infozutf-8)r9   
isinstancemsgbyteskwr   r3   asdictencodewriteUnicodeErrorr@   handleError)r5   recordbinarybinary_streamrM   r   r   r   emitY   s(   


zHandler.emitc                 C   s.   t  }t|d |d |d d t j ~d S )Nr         )sysrK   	tracebackprint_exceptionstderr)r5   eir   r   r   rT   q   s    zHandler.handleErrorr+   )r   r   r   r9   r   r   r=   r6   r:   r>   r@   rI   rX   rT   r   r   r   r   r0   4   s    
r0   c                   @   s&   e Zd ZdddZdd Zdd ZdS )	StreamHandlerNc                 C   s   t | | d S r+   )r0   r6   )r5   strmr   r   r   r6   w      zStreamHandler.__init__c                 C   s   t | jdr| j  d S d S )Nclear)rH   r3   rc   r5   r   r   r   removez   s   zStreamHandler.removec                 C      d S r+   r   rd   r   r   r   reopen~      zStreamHandler.reopenr+   )r   r   r   r6   re   rg   r   r   r   r   r`   v   s    
r`   c                   @   s>   e Zd ZdddZdd Zdd Zdd	 Zd
d Zdd ZdS )BoundIO    c                 C   s   || _ || _d S r+   )maxbytesbuf)r5   rk   rl   r   r   r   r6      r7   zBoundIO.__init__c                 C   rf   r+   r   rd   r   r   r   r@      rh   zBoundIO.flushc                 C   s   |    d S r+   )rc   rd   r   r   r   rI      s   zBoundIO.closec                 C   s>   t |}t | j| | jkr| j|d  | _|  j|7  _d S r+   )lenrl   rk   )r5   bblenr   r   r   rR      s   zBoundIO.writec                 C   s   | j S r+   rl   rd   r   r   r   getvalue   s   zBoundIO.getvaluec                 C   s
   d| _ d S )Nrj   rp   rd   r   r   r   rc      r;   zBoundIO.clearN)rj   )	r   r   r   r6   r@   rI   rR   rq   rc   r   r   r   r   ri      s    
ri   c                   @   s*   e Zd ZdZd
ddZdd Zdd Zd	S )FileHandlerz3File handler which supports reopening of logs.
    abc              
   C   sx   t |  zt||| _W n& ty3 } z|dkr(|jtjkr(d}t||| _n W Y d }~nd }~ww || _|| _d S )Nrs   wb)	r0   r6   openr3   OSErrorrC   ESPIPEbaseFilenamemode)r5   filenamery   er   r   r   r6      s   

zFileHandler.__init__c                 C   s"   |    t| j| j| _d| _d S r2   )rI   ru   rx   ry   r3   r4   rd   r   r   r   rg      s   
zFileHandler.reopenc              
   C   sT   |    z	t| j W d S  ty) } z|jd tjkr W Y d }~d S d }~ww r?   )rI   osre   rx   rv   rB   rC   ENOENTrE   r   r   r   re      s   zFileHandler.removeN)rs   )r   r   r   __doc__r6   rg   re   r   r   r   r   rr      s
    
rr   c                   @   sJ   e Zd Z		dddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dS )RotatingFileHandlerrs       r   c                 C   s6   |dkrd}t | || || _|| _d| _d| _dS )a  
        Open the specified file and use it as the stream for logging.

        By default, the file grows indefinitely. You can specify particular
        values of maxBytes and backupCount to allow the file to rollover at
        a predetermined size.

        Rollover occurs whenever the current log file is nearly maxBytes in
        length. If backupCount is >= 1, the system will successively create
        new files with the same pathname as the base file, but with extensions
        ".1", ".2" etc. appended to it. For example, with a backupCount of 5
        and a base file name of "app.log", you would get "app.log",
        "app.log.1", "app.log.2", ... through to "app.log.5". The file being
        written to is always "app.log" - when it gets filled up, it is closed
        and renamed to "app.log.1", and if files "app.log.1", "app.log.2" etc.
        exist, then they are renamed to "app.log.2", "app.log.3" etc.
        respectively.

        If maxBytes is zero, rollover never occurs.
        r   rs   r   N)rr   r6   maxBytesbackupCountcounterevery)r5   rz   ry   r   r   r   r   r   r6      s   
zRotatingFileHandler.__init__c                 C   s   t | | |   dS )z
        Emit a record.

        Output the record to the file, catering for rollover as described
        in doRollover().
        N)rr   rX   
doRollover)r5   rU   r   r   r   rX      s   zRotatingFileHandler.emitc                 C   s
   t |S r+   )r|   re   r5   fnr   r   r   _remove   s   
zRotatingFileHandler._removec                 C   s   t ||S r+   )r|   rename)r5   srctgtr   r   r   _rename      zRotatingFileHandler._renamec                 C   s   t j|S r+   )r|   pathexistsr   r   r   r   _exists   r   zRotatingFileHandler._existsc              
   C   s   |  |r(z| | W n ty' } z|jd tjkr W Y d }~nd }~ww z	| || W d S  tyM } z|jd tjkrB W Y d }~d S d }~ww r?   )r   r   rv   rB   rC   r}   r   )r5   sfndfnrF   r   r   r   removeAndRename   s"   
z#RotatingFileHandler.removeAndRenamec                 C   s   | j dkrdS | j | j ksdS | j  | jdkrOt| jd ddD ]}d| j|f }d| j|d f }tj	|rB| 
|| q$| jd }| 
| j| t| jd| _dS )z<
        Do a rollover, as described in __init__().
        r   NrY   z%s.%dz.1rt   )r   r3   tellrI   r   rangerx   r|   r   r   r   ru   )r5   ir   r   r   r   r   r     s   



zRotatingFileHandler.doRolloverN)rs   r   r   )
r   r   r   r6   rX   r   r   r   r   r   r   r   r   r   r      s    

r   c                   @   s   e Zd Zdd Zdd ZdS )	LogRecordc                 K   s   || _ || _|| _d | _d S r+   )r=   rM   rO   dictrepr)r5   r=   rM   rO   r   r   r   r6     s   
zLogRecord.__init__c                 C   sx   | j d u r9t }|t| d }tdt|}d||f }t| j }t| j}| j	r2|| j	 }|||d| _ | j S )Ni  z%Y-%m-%d %H:%M:%Sz%s,%03d)message	levelnameasctime)
r   timer   strftime	localtimeLOG_LEVELS_BY_NUMr=   r   rM   rO   )r5   nowmsecspart1r   r   rM   r   r   r   rP     s   



zLogRecord.asdictN)r   r   r   r6   rP   r   r   r   r   r     s    r   c                   @   sn   e Zd Zd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dd Zdd ZdS )LoggerNc                 C   s*   |d u rt j}|| _|d u rg }|| _d S r+   )r   r   r=   handlers)r5   r=   r   r   r   r   r6   ,  s   
zLogger.__init__c                 C   s   | j D ]}|  qd S r+   )r   rI   )r5   handlerr   r   r   rI   5  s   

zLogger.closec                 K   *   t j| jkr| jt j|fi | d S d S r+   )r   r   r=   logr5   rM   rO   r   r   r   r"   9     zLogger.blatherc                 K   r   r+   )r   r   r=   r   r   r   r   r   r!   =  r   zLogger.tracec                 K   r   r+   )r   r   r=   r   r   r   r   r   r    A  r   zLogger.debugc                 K   r   r+   )r   r   r=   r   r   r   r   r   r   E  r   zLogger.infoc                 K   r   r+   )r   r   r=   r   r   r   r   r   r   I  r   zLogger.warnc                 K   r   r+   )r   r   r=   r   r   r   r   r   r   M  r   zLogger.errorc                 K   r   r+   )r   r   r=   r   r   r   r   r   r   Q  r   zLogger.criticalc                 K   s6   t ||fi |}| jD ]}||jkr|| qd S r+   )r   r   r=   rX   )r5   r=   rM   rO   rU   r   r   r   r   r   U  s   


z
Logger.logc                 C   s   | j | d S r+   )r   append)r5   hdlrr   r   r   
addHandler[  rb   zLogger.addHandlerc                 C   s   t r+   )NotImplementedErrorrd   r   r   r   rq   ^  rh   zLogger.getvalue)NN)r   r   r   r6   rI   r"   r!   r    r   r   r   r   r   r   rq   r   r   r   r   r   +  s    
	r   c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )SyslogHandlerc                 C   s   t |  td usJ dd S )NzSyslog module not present)r0   r6   r   rd   r   r   r   r6   b  s   
zSyslogHandler.__init__c                 C   rf   r+   r   rd   r   r   r   rI   f  rh   zSyslogHandler.closec                 C   rf   r+   r   rd   r   r   r   rg   i  rh   zSyslogHandler.reopenc                 C   s   t  | d S r+   r   )r5   rM   r   r   r   _syslogl  s   zSyslogHandler._syslogc              	   C   s   z7|  }|d }|ddD ]#}||d< | j| }z| | W q ty4   | |d Y qw W d S    |   Y d S )Nr   
zUTF-8)rP   rstripsplitr9   r   rS   rQ   rT   )r5   rU   paramsr   linerM   r   r   r   rX   p  s   
zSyslogHandler.emitN)r   r   r   r6   rI   rg   r   rX   r   r   r   r   r   a  s    r   c                 C   s   t | S r+   )r   r<   r   r   r   	getLogger~  s   r   i    c                 C   s<   t |}t|}|| j || | | |j| _dS )z2Attach a new BoundIO handler to an existing LoggerN)ri   r`   r>   r=   r:   r   rq   )loggerr9   rk   ior   r   r   r   handle_boundIO  s   

r   c                 C   s.   t tj}|| || j | | dS )zDAttach a new StreamHandler with stdout handler to an existing LoggerN)r`   r[   stdoutr:   r>   r=   r   r   r9   r   r   r   r   handle_stdout  s   

r   c                 C   s*   t  }|| || j | | dS )z1Attach a new Syslog handler to an existing LoggerN)r   r:   r>   r=   r   r   r   r   r   handle_syslog  s   
r   Fc                 C   sT   |dkrt  }n|du rt|}nt|d||}|| || j | | dS )zAttach a new file handler to an existing Logger. If the filename
    is the magic name of 'syslog' then make it a syslog handler instead.r   FaN)r   rr   r   r:   r>   r=   r   )r   rz   r9   rotatingrk   backupsr   r   r   r   handle_file  s   

r   r+   )Fr   r   )r~   r|   rC   r[   r   r\   supervisor.compatr   r   r   r   r   r   r*   r   r/   r0   r`   ri   rr   r   r   r   r   r   _2MBr   r   r   r   r   r   r   r   <module>   s:    			B$Z6
	