3
ûZð]_:  ã               @   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_consoleTzgunicorn.error)r/   r0   Ú	propagateÚqualnamezgunicorn.access)zgunicorn.errorzgunicorn.accesszlogging.StreamHandlerZgenericzext://sys.stdout)ÚclassÚ	formatterÚstreamzext://sys.stderr)r.   r1   z5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]zlogging.Formatter)ÚformatÚdatefmtr4   )ÚversionÚdisable_existing_loggersÚrootÚloggersr0   Ú
formattersc              C   s    t j} | jjjƒ }dd„ |D ƒS )z get list of all loggers c             S   s   g | ]}t j|ƒ‘qS © )ÚloggingÚ	getLogger)Ú.0Únamer>   r>   ú5/tmp/pip-build-w1as9q70/gunicorn/gunicorn/glogging.pyú
<listcomp>^   s    zloggers.<locals>.<listcomp>)r?   r;   ÚmanagerÚ
loggerDictÚkeys)r;   Úexistingr>   r>   rC   r<   Z   s    r<   c                   s$   e Zd Zdd„ Z‡ fdd„Z‡  ZS )Ú	SafeAtomsc             C   sH   t j| ƒ x8|jƒ D ],\}}t|tƒr8|jddƒ| |< q|| |< qW d S )Nú"z\")ÚdictÚ__init__ÚitemsÚ
isinstanceÚstrÚreplace)ÚselfÚatomsÚkeyÚvaluer>   r>   rC   rL   c   s
    

zSafeAtoms.__init__c                sF   |j dƒr*|jƒ }|| kr&tƒ j|ƒS dS || kr>tƒ j|ƒS dS d S )NÚ{ú-)Ú
startswithÚlowerÚsuperÚ__getitem__)rQ   ÚkÚkl)Ú	__class__r>   rC   rZ   k   s    
zSafeAtoms.__getitem__)Ú__name__Ú
__module__Ú__qualname__rL   rZ   Ú__classcell__r>   r>   )r]   rC   rI   a   s   rI   c             C   sP  | j dƒrRd }| jddƒ}t|ƒdkr@|d } |d dkr@tj}|| jdƒd fS | j dƒrr| jdƒd } tj}n(| j dƒr’| jdƒd } tj}ntd	ƒ‚d
| krÆd| krÆ| jdƒd dd … jƒ }n2d| krâ| jdƒd jƒ }n| dkrðd}n| jƒ }| jdƒd } d| k�r@| jddƒd }|jƒ �s6td| ƒ‚t	|ƒ}nd}|||ffS )Nzunix://ú#r   r   r   Zdgramzudp://ztcp://zinvalid syslog addressú[ú]ú:Ú Ú	localhostz%r is not a valid port number.i  éÿÿÿÿ)
rW   ÚsplitÚlenÚsocketÚ
SOCK_DGRAMÚSOCK_STREAMÚRuntimeErrorrX   ÚisdigitÚint)ÚaddrZ	sock_typeÚpartsÚsocktypeÚhostÚportr>   r>   rC   Úparse_syslog_addressx   s<    





rv   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Údebugz5%(asctime)s [%(process)d] [%(levelname)s] %(message)sz[%Y-%m-%d %H:%M:%S %z]z%(message)sz[%(process)d] %(message)sc             C   sX   t jdƒ| _d| j_t jdƒ| _d| j_g | _g | _d | _tj	ƒ | _
|| _| j|ƒ d S )Nzgunicorn.errorFzgunicorn.access)r?   r@   Ú	error_logr2   Ú
access_logZerror_handlersZaccess_handlersÚlogfileÚ	threadingÚLockÚlockÚcfgÚsetup)rQ   rƒ   r>   r>   rC   rL   ¹   s    
zLogger.__init__c             C   sê  | j j|jjƒ tjƒ| _| jj| jƒ | jjtjƒ | j	j
r¢|jdkr¢xtjtjfD ]}|jƒ  qTW t|jdƒ| _tj| jjƒ tjjƒ ƒ tj| jjƒ tjjƒ ƒ | j| j|jtj| j| jƒƒ |jd k	rê| j| j|jtj| jƒtjd� |j�r"| j| j|| jdƒ |j�s"| j| j|| jdƒ |j�r†t j!ƒ }|j"|jƒ yt#|ƒ W n8 t$t%t&t'fk
�r‚ } zt(t)|ƒƒ‚W Y d d }~X nX n`|j*�rætj+j,|j*ƒ�rÔt j!ƒ }|j*|d< tj+j-|j*ƒ|d< t.|j*|dd	� nd
}t(||j* ƒ‚d S )NrV   za+)Úfmtr6   ry   ÚaccessÚ__file__ÚhereF)Údefaultsr:   z Error: log config '%s' not found)/Ú
LOG_LEVELSÚgetÚloglevelrX   r?   r-   r}   ÚsetLevelr~   rƒ   Úcapture_outputÚerrorlogÚsysÚstdoutÚstderrÚflushÚopenr   ÚosÚdup2ÚfilenoÚ_set_handlerÚ	FormatterÚ	error_fmtr8   Ú	accesslogÚ
access_fmtr"   Ú_set_syslog_handlerÚ
syslog_fmtÚ!disable_redirect_access_to_syslogÚlogconfig_dictÚCONFIG_DEFAULTSÚcopyÚupdater   ÚAttributeErrorÚImportErrorÚ
ValueErrorÚ	TypeErrorrn   rO   Ú	logconfigÚpathÚexistsÚdirnamer   )rQ   rƒ   r6   ÚconfigÚexcr‰   Úmsgr>   r>   rC   r„   Å   sP    
 

zLogger.setupc             O   s   | j j|f|ž|Ž d S )N)r}   rx   )rQ   r®   ÚargsÚkwargsr>   r>   rC   rx   ü   s    zLogger.criticalc             O   s   | j j|f|ž|Ž d S )N)r}   ry   )rQ   r®   r¯   r°   r>   r>   rC   ry   ÿ   s    zLogger.errorc             O   s   | j j|f|ž|Ž d S )N)r}   rz   )rQ   r®   r¯   r°   r>   r>   rC   rz     s    zLogger.warningc             O   s   | j j|f|ž|Ž d S )N)r}   r{   )rQ   r®   r¯   r°   r>   r>   rC   r{     s    zLogger.infoc             O   s   | j j|f|ž|Ž d S )N)r}   r|   )rQ   r®   r¯   r°   r>   r>   rC   r|     s    zLogger.debugc             O   s   | j j|f|ž|Ž d S )N)r}   Ú	exception)rQ   r®   r¯   r°   r>   r>   rC   r±     s    zLogger.exceptionc             O   s8   t |tƒr| jj|jƒ tjƒ}| jj||f|ž|Ž d S )N)	rN   rO   rŠ   r‹   rX   r?   r-   r}   Úlog)rQ   Zlvlr®   r¯   r°   r>   r>   rC   r²     s    
z
Logger.logc       
      C   sn  |j }t|tƒr |jddƒd }|jddƒd| j|ƒp8d| jƒ d|d |d |d	 f ||jdƒ|jd
ƒ|jdƒ|jd	ƒt|ddƒdk	r’t|jƒp”dt|ddƒ|jddƒ|jddƒ|j	|j	d |j
 d|j	|j
f dtjƒ  dœ}t|dƒrô|j}n|}t|dƒ�r|jƒ }|jdd„ |D ƒƒ |j}t|dƒ�r:|jƒ }|jdd„ |D ƒƒ |jƒ }	|jdd„ |	D ƒƒ |S )z' Gets atoms for log formating.
        Nr   r   ZREMOTE_ADDRrV   z%s %s %sÚREQUEST_METHODZRAW_URIZSERVER_PROTOCOLZ	PATH_INFOÚQUERY_STRINGÚsentZHTTP_REFERERZHTTP_USER_AGENTi@B z%d.%06dz<%s>)ÚhÚlÚuÚtÚrÚsÚmÚUÚqÚHÚbÚBÚfÚaÚTÚDÚLÚpÚheadersrM   c             S   s   i | ]\}}|d |j ƒ  “qS )z{%s}i)rX   )rA   r[   Úvr>   r>   rC   ú
<dictcomp>8  s    z Logger.atoms.<locals>.<dictcomp>c             S   s   i | ]\}}|d |j ƒ  “qS )z{%s}o)rX   )rA   r[   rÉ   r>   r>   rC   rÊ   ?  s    c             S   s   i | ]\}}|d |j ƒ  “qS )z{%s}e)rX   )rA   r[   rÉ   r>   r>   rC   rÊ   C  s    )ÚstatusrN   rO   ri   r‹   Ú	_get_userÚnowÚgetattrrµ   ÚsecondsÚmicrosecondsr•   ÚgetpidÚhasattrrÈ   rM   r£   )
rQ   ÚrespÚreqÚenvironÚrequest_timerË   rR   Zreq_headersZresp_headersZenviron_variablesr>   r>   rC   rR     sF    





zLogger.atomsc          	   C   sz   | j jp(| j jp(| j jp(| j jo(| j j s.dS | j| j||||ƒƒ}y| jj	| j j
|ƒ W n   | jtjƒ ƒ 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_classrR   r~   r{   Zaccess_log_formatry   Ú	tracebackÚ
format_exc)rQ   rÓ   rÔ   rÕ   rÖ   Z
safe_atomsr>   r>   rC   r†   G  s    zLogger.accessc             C   s
   t jdƒS )z) return date in Apache Common Log Format z[%d/%b/%Y:%H:%M:%S %z])ÚtimeÚstrftime)rQ   r>   r>   rC   rÍ   \  s    z
Logger.nowc             C   sø   | j jr˜| j jdkr˜xtjtjfD ]}|jƒ  q"W | j�Z | jd k	rN| jj	ƒ  t
| j jdƒ| _tj| jjƒ tjjƒ ƒ tj| jjƒ tjjƒ ƒ W d Q R X xZtƒ D ]P}xJ|jD ]@}t|tjƒr¬|jƒ  z|jrÞ|j	ƒ  |jƒ |_W d |jƒ  X q¬W q W d S )NrV   za+)rƒ   rŽ   r�   r�   r‘   r’   r“   r‚   r   Úcloser”   r•   r–   r—   r<   r0   rN   r?   ÚFileHandlerÚacquirer6   Ú_openÚrelease)rQ   r6   r²   Úhandlerr>   r>   rC   Úreopen_files`  s$    

"zLogger.reopen_filesc             C   s^   xXt ƒ D ]N}xH|jD ]>}t|tjƒr|jƒ  z|jrDtj|jj	ƒ ƒ W d |j
ƒ  X qW qW d S )N)r<   r0   rN   r?   rÝ   rÞ   r6   r   Úclose_on_execr—   rà   )rQ   r²   rá   r>   r>   rC   rã   x  s    zLogger.close_on_execc             C   s$   x|j D ]}t|ddƒr|S qW d S )NÚ	_gunicornF)r0   rÎ   )rQ   r²   r¶   r>   r>   rC   Ú_get_gunicorn_handlerƒ  s    zLogger._get_gunicorn_handlerNc             C   sš   | j |ƒ}|r|jj|ƒ |d k	r–|dkr6tj|ƒ}nFtj|ƒ tj|ƒ}ytj	|j
| jj| jjƒ W n tk
rz   Y nX |j|ƒ d|_|j|ƒ d S )NrV   T)rå   r0   Úremover?   ÚStreamHandlerr   Zcheck_is_writeablerÝ   r•   ÚchownÚbaseFilenamerƒ   r#   ÚgroupÚOSErrorÚsetFormatterrä   Ú
addHandler)rQ   r²   Úoutputr…   r6   r¶   r>   r>   rC   r˜   ˆ  s    



zLogger._set_handlerc       
      C   s¨   |j s|jjddƒ}n|j }d||f }tjd||f ƒ}yt|jjƒ  }W n tk
rh   t	dƒ‚Y nX t
|jƒ\}}tjj|||d�}	|	j|ƒ d|	_|j|	ƒ d S )Nre   Ú.zgunicorn.%s.%sz%s: %szunknown facility name)ÚaddressÚfacilityrs   T)Zsyslog_prefixZ	proc_namerP   r?   r™   ÚSYSLOG_FACILITIESZsyslog_facilityrX   ÚKeyErrorrn   rv   Zsyslog_addrr0   ÚSysLogHandlerrì   rä   rí   )
rQ   r²   rƒ   r…   rB   Úprefixrñ   rs   rq   r¶   r>   r>   rC   r�      s    

zLogger._set_syslog_handlerc             C   s¸   d }|j dƒ}|r´|jƒ jdƒr´|jddƒ}t|ƒdkr´y2tj|d jƒ jdƒƒ}|j	dƒ}|jddƒ}W n4 t
tjtfk
rž } z| jd|ƒ |S d }~X nX t|ƒdkr´|d	 }|S )
NZHTTP_AUTHORIZATIONÚbasicú r   r   zutf-8re   zCouldn't get username: %sr   )r‹   rX   rW   ri   rj   Úbase64Ú	b64decodeÚstripÚencodeÚdecoder§   ÚbinasciiÚErrorÚUnicodeDecodeErrorr|   )rQ   rÕ   r#   Z	http_authr   r­   r>   r>   rC   rÌ   ½  s    

zLogger._get_user)N)#r^   r_   r`   r?   ÚCRITICALÚERRORÚWARNINGr-   ÚDEBUGrŠ   rŒ   rš   r8   rœ   rž   rI   r×   rL   r„   rx   ry   rz   r{   r|   r±   r²   rR   r†   rÍ   râ   rã   rå   r˜   r�   rÌ   r>   r>   r>   rC   rw   ¦   s:   
74
rw   )rø   rý   rÚ   r?   rw   rE   ÚemittedNoHandlerWarningÚlogging.configr   r   r•   rk   r�   r€   rØ   Zgunicornr   rò   rK   r¡   r<   rI   rv   Úobjectr>   r>   r>   rC   Ú<module>   sv   



.