U
    ‰dA:  ã                   @   s6  d dl Z d dlZd dlZd dlZdejj_d dlm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Zd dlmZ dddd	d
d ddddddddddddddddœZeddddgdœddgddd œddgdd!d œd"œd#d$d%d&œd#d$d'd&œd(œd$d)d*d+d,œid-Zd.d/„ ZG d0d1„ d1eƒZd2d3„ ZG d4d5„ d5eƒZdS )6é    Né   )Ú
dictConfig)Ú
fileConfig)Úutilé   é
   é	   é   é   é   é   é   é   é   é   é   é   é   é   é   é   é   )ÚauthÚauthprivÚcronÚdaemonÚftpÚkernÚlprÚmailÚnewsÚsecurityÚsyslogÚuserÚuucpÚlocal0Úlocal1Úlocal2Úlocal3Úlocal4Úlocal5Úlocal6Úlocal7FÚINFOÚconsole)ÚlevelÚhandlersÚerror_consoleTúgunicorn.error)r/   r0   Ú	propagateÚqualnameúgunicorn.access)r2   r5   zlogging.StreamHandlerZgenericzext://sys.stdout)ÚclassÚ	formatterÚstreamzext://sys.stderr)r.   r1   ú5%(asctime)s [%(process)d] [%(levelname)s] %(message)sú[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)ÚformatÚdatefmtr6   )ÚversionÚdisable_existing_loggersÚrootÚloggersr0   Ú
formattersc                  C   s    t j} | jj ¡ }dd„ |D ƒS )z get list of all loggers c                 S   s   g | ]}t  |¡‘qS © )ÚloggingÚ	getLogger)Ú.0ÚnamerB   rB   ú5/tmp/pip-unpacked-wheel-1tw_qy24/gunicorn/glogging.pyÚ
<listcomp>^   s     zloggers.<locals>.<listcomp>)rC   r?   ÚmanagerÚ
loggerDictÚkeys)r?   ÚexistingrB   rB   rG   r@   Z   s    r@   c                       s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )Ú	SafeAtomsc                 C   sD   t  | ¡ | ¡ D ],\}}t|tƒr6| dd¡| |< q|| |< qd S )Nú"z\")ÚdictÚ__init__ÚitemsÚ
isinstanceÚstrÚreplace)ÚselfÚatomsÚkeyÚvaluerB   rB   rG   rP   c   s
    

zSafeAtoms.__init__c                    sF   |  d¡r*| ¡ }|| kr&tƒ  |¡S dS || kr>tƒ  |¡S dS d S )NÚ{ú-)Ú
startswithÚlowerÚsuperÚ__getitem__)rU   ÚkÚkl©Ú	__class__rB   rG   r^   k   s    
zSafeAtoms.__getitem__)Ú__name__Ú
__module__Ú__qualname__rP   r^   Ú__classcell__rB   rB   ra   rG   rM   a   s   rM   c                 C   sP  |   d¡rRd }|  dd¡}t|ƒdkr@|d } |d dkr@tj}||  d¡d fS |   d¡rr|  d¡d } tj}n(|   d¡r’|  d¡d } tj}ntd	ƒ‚d
| krÆd| krÆ|  d¡d dd …  ¡ }n2d| krâ|  d¡d  ¡ }n| dkrðd}n|  ¡ }|  d¡d } d| kr@|  dd¡d }| ¡ s6td| ƒ‚t	|ƒ}nd}|||ffS )Nzunix://ú#r   r   r   Zdgramzudp://ztcp://zinvalid syslog addressú[ú]ú:Ú Ú	localhostéÿÿÿÿz%r is not a valid port number.i  )
r[   ÚsplitÚlenÚsocketÚ
SOCK_DGRAMÚSOCK_STREAMÚRuntimeErrorr\   ÚisdigitÚint)ÚaddrZ	sock_typeÚpartsÚsocktypeÚhostÚportrB   rB   rG   Úparse_syslog_addressx   s<    





r{   c                   @   sÒ   e Zd ZejejejejejdœZ	ejZ
dZdZdZdZe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d„ Zdd„ Zd d!„ Zd"d#„ Zd+d%d&„Z d'd(„ Z!d)d*„ Z"d$S ),ÚLogger)ÚcriticalÚerrorÚwarningÚinfoÚdebugr9   r:   z%(message)sz[%(process)d] %(message)sc                 C   sX   t  d¡| _d| j_t  d¡| _d| j_g | _g | _d | _t 	¡ | _
|| _|  |¡ d S )Nr2   Fr5   )rC   rD   Ú	error_logr3   Ú
access_logZerror_handlersZaccess_handlersÚlogfileÚ	threadingÚLockÚlockÚcfgÚsetup)rU   rˆ   rB   rB   rG   rP   ¹   s    
zLogger.__init__c                 C   sæ  | j  |j ¡ tj¡| _| j | j¡ | j tj¡ | j	j
rž|jdkržtjtjfD ]}| ¡  qRt|jdƒ| _t | j ¡ tj ¡ ¡ t | j ¡ tj ¡ ¡ |  | j|jt | j| j¡¡ |jd k	ræ| j| j|jt | j¡tjd |jr|  | j|| jd¡ |js|  | j|| jd¡ |jr‚t  !¡ }| "|j¡ zt#|ƒ W n8 t$t%t&t'fk
r~ } zt(t)|ƒƒ‚W 5 d }~X Y nX n`|j*râtj+ ,|j*¡rÐt  !¡ }|j*|d< tj+ -|j*¡|d< t.|j*|dd	 nd
}t(||j* ƒ‚d S )NrZ   úa+)Úfmtr8   r~   ÚaccessÚ__file__ÚhereF)Údefaultsr>   z Error: log config '%s' not found)/Ú
LOG_LEVELSÚgetÚloglevelr\   rC   r-   r‚   ÚsetLevelrƒ   rˆ   Úcapture_outputÚerrorlogÚsysÚstdoutÚstderrÚflushÚopenr„   ÚosÚdup2ÚfilenoÚ_set_handlerÚ	FormatterÚ	error_fmtr<   Ú	accesslogÚ
access_fmtr"   Ú_set_syslog_handlerÚ
syslog_fmtÚ!disable_redirect_access_to_syslogÚlogconfig_dictÚCONFIG_DEFAULTSÚcopyÚupdater   ÚAttributeErrorÚImportErrorÚ
ValueErrorÚ	TypeErrorrs   rS   Ú	logconfigÚpathÚexistsÚdirnamer   )rU   rˆ   r8   ÚconfigÚexcr   ÚmsgrB   rB   rG   r‰   Å   sn    
ÿ
 
 þ   ÿ   ÿü 
ÿzLogger.setupc                 O   s   | j j|f|ž|Ž d S ©N)r‚   r}   ©rU   r´   ÚargsÚkwargsrB   rB   rG   r}   þ   s    zLogger.criticalc                 O   s   | j j|f|ž|Ž d S rµ   )r‚   r~   r¶   rB   rB   rG   r~     s    zLogger.errorc                 O   s   | j j|f|ž|Ž d S rµ   )r‚   r   r¶   rB   rB   rG   r     s    zLogger.warningc                 O   s   | j j|f|ž|Ž d S rµ   )r‚   r€   r¶   rB   rB   rG   r€     s    zLogger.infoc                 O   s   | j j|f|ž|Ž d S rµ   )r‚   r   r¶   rB   rB   rG   r   
  s    zLogger.debugc                 O   s   | j j|f|ž|Ž d S rµ   )r‚   Ú	exceptionr¶   rB   rB   rG   r¹     s    zLogger.exceptionc                 O   s8   t |tƒr| j | ¡ tj¡}| jj||f|ž|Ž d S rµ   )	rR   rS   r   r‘   r\   rC   r-   r‚   Úlog)rU   Zlvlr´   r·   r¸   rB   rB   rG   rº     s    
z
Logger.logc           
      C   s†  |j }t|tƒr | dd¡d }| dd¡d|  |¡p8d|  ¡ d|d |d |d	 f || d¡| d
¡| d¡| d	¡t|ddƒdk	r’t|jƒp”dt|ddƒ| dd¡| dd¡|j	|j	d |j
 |j	d t|j
d ƒ d|j	|j
f dt ¡  dœ}t|dƒr|j}n|}t|dƒr$| ¡ }| dd„ |D ƒ¡ |j}t|dƒrR| ¡ }| dd„ |D ƒ¡ | ¡ }	| dd„ |	D ƒ¡ |S )z' Gets atoms for log formating.
        Nr   r   ZREMOTE_ADDRrZ   z%s %s %sÚREQUEST_METHODZRAW_URIZSERVER_PROTOCOLZ	PATH_INFOÚQUERY_STRINGÚsentZHTTP_REFERERZHTTP_USER_AGENTi@B iè  z%d.%06dz<%s>)ÚhÚlÚuÚtÚrÚsÚmÚUÚqÚHÚbÚBÚfÚaÚTÚDÚMÚLÚpÚheadersrQ   c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}i©r\   ©rE   r_   ÚvrB   rB   rG   Ú
<dictcomp><  s     
 z Logger.atoms.<locals>.<dictcomp>c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}orÒ   rÓ   rB   rB   rG   rÕ   C  s     
 c                 S   s   i | ]\}}d |  ¡  |“qS )z{%s}erÒ   rÓ   rB   rB   rG   rÕ   G  s     
 )ÚstatusrR   rS   rn   r‘   Ú	_get_userÚnowÚgetattrr½   ÚsecondsÚmicrosecondsru   r›   ÚgetpidÚhasattrrÑ   rQ   r©   )
rU   ÚrespÚreqÚenvironÚrequest_timerÖ   rV   Zreq_headersZresp_headersZenviron_variablesrB   rB   rG   rV     sN    

þ



ëzLogger.atomsc                 C   s€   | j js,| j js,| j js,| j jr(| j jr,dS |  |  ||||¡¡}z| j 	| j j
|¡ W n" tk
rz   |  t ¡ ¡ Y nX dS )z\ See http://httpd.apache.org/docs/2.0/logs.html#combined
        for format details
        N)rˆ   r¡   r®   r¦   r"   r¥   Úatoms_wrapper_classrV   rƒ   r€   Zaccess_log_formatÚ	Exceptionr~   Ú	tracebackÚ
format_exc)rU   rÞ   rß   rà   rá   Z
safe_atomsrB   rB   rG   rŒ   K  s    ÿþþÿzLogger.accessc                 C   s
   t  d¡S )z) return date in Apache Common Log Format z[%d/%b/%Y:%H:%M:%S %z])ÚtimeÚstrftime)rU   rB   rB   rG   rØ   a  s    z
Logger.nowc              
   C   sì   | j jr”| j jdkr”tjtjfD ]}| ¡  q | jZ | jd k	rJ| j 	¡  t
| j jdƒ| _t | j ¡ tj ¡ ¡ t | j ¡ tj ¡ ¡ W 5 Q R X tƒ D ]L}|jD ]@}t|tjƒr¤| ¡  z|jrÖ| 	¡  | ¡ |_W 5 | ¡  X q¤qšd S )NrZ   rŠ   )rˆ   r”   r•   r–   r—   r˜   r™   r‡   r„   Úcloserš   r›   rœ   r   r@   r0   rR   rC   ÚFileHandlerÚacquireÚreleaser8   Ú_open)rU   r8   rº   ÚhandlerrB   rB   rG   Úreopen_filese  s$    


"

zLogger.reopen_filesc              
   C   sV   t ƒ D ]J}|jD ]>}t|tjƒr| ¡  z|jr@t 	|j 
¡ ¡ W 5 | ¡  X qqd S rµ   )r@   r0   rR   rC   ré   rê   rë   r8   r   Úclose_on_execr   )rU   rº   rí   rB   rB   rG   rï   |  s    

zLogger.close_on_execc                 C   s$   |j D ]}t|ddƒr|  S qd S )NÚ	_gunicornF)r0   rÙ   )rU   rº   r¾   rB   rB   rG   Ú_get_gunicorn_handler‡  s    
zLogger._get_gunicorn_handlerNc                 C   sš   |   |¡}|r|j |¡ |d k	r–|dkr6t |¡}nFt |¡ t |¡}zt 	|j
| jj| jj¡ W n tk
rz   Y nX | |¡ d|_| |¡ d S )NrZ   T)rñ   r0   ÚremoverC   ÚStreamHandlerr   Zcheck_is_writeableré   r›   ÚchownÚbaseFilenamerˆ   r#   ÚgroupÚOSErrorÚsetFormatterrð   Ú
addHandler)rU   rº   Úoutputr‹   r8   r¾   rB   rB   rG   rž   Œ  s    



zLogger._set_handlerc           
      C   s    |j p|j dd¡}d||f }t d||f ¡}zt|j ¡  }W n tk
r`   t	dƒ‚Y nX t
|jƒ\}}tjj|||d}	|	 |¡ d|	_| |	¡ d S )Nrj   Ú.zgunicorn.%s.%sz%s: %szunknown facility name)ÚaddressÚfacilityrx   T)Zsyslog_prefixZ	proc_namerT   rC   rŸ   ÚSYSLOG_FACILITIESZsyslog_facilityr\   ÚKeyErrorrs   r{   Zsyslog_addrr0   ÚSysLogHandlerrø   rð   rù   )
rU   rº   rˆ   r‹   rF   Úprefixrý   rx   rv   r¾   rB   rB   rG   r£   ¤  s     ÿ
zLogger._set_syslog_handlerc              
   C   sÂ   d }|  d¡}|r¾| ¡  d¡r¾| dd¡}t|ƒdkr¾z2t |d  ¡  d¡¡}| 	d¡}| dd¡}W n> t
tjtfk
r¨ } z|  d|¡ | W Y ¢S d }~X Y nX t|ƒdkr¾|d	 }|S )
NZHTTP_AUTHORIZATIONÚbasicú r   r   zutf-8rj   zCouldn't get username: %sr   )r‘   r\   r[   rn   ro   Úbase64Ú	b64decodeÚstripÚencodeÚdecoder­   ÚbinasciiÚErrorÚUnicodeDecodeErrorr   )rU   rà   r#   Z	http_authr   r³   rB   rB   rG   r×   ¾  s    

zLogger._get_user)N)#rc   rd   re   rC   ÚCRITICALÚERRORÚWARNINGr-   ÚDEBUGr   r’   r    r<   r¢   r¤   rM   râ   rP   r‰   r}   r~   r   r€   r   r¹   rº   rV   rŒ   rØ   rî   rï   rñ   rž   r£   r×   rB   rB   rB   rG   r|   ¦   s<   û96
r|   )r  r	  ræ   rC   r|   rI   ÚemittedNoHandlerWarningÚlogging.configr   r   r›   rp   r–   r…   rä   Zgunicornr   rþ   rO   r§   r@   rM   r{   ÚobjectrB   rB   rB   rG   Ú<module>   sŠ   
ë
üüøýýúýÿà*.