
y X8                 @   sq  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	 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 m Z i d d 6d d	 6d
 d 6d d 6d d 6d  d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d  6d! d" 6d# d$ 6d% d& 6d' d( 6d) d* 6d+ d, 6Z e d- d d. d/ d0 i i d1 d2 6d3 g d4 6d5 6i d1 d2 6d6 g d4 6d7 d8 6d9 d: 6d9 6i d1 d2 6d3 g d4 6d7 d8 6d; d: 6d; 6d4 i i d< d= 6d> d? 6d@ dA 6d3 6i d< d= 6d> d? 6dB dA 6d6 6dC i i dD dE 6dF dG 6dH d= 6d> 6 Z dI d0   Z GdJ dK   dK e  Z dL dM   Z GdN dO   dO e  Z d S)P    N   )
fileConfig)util)PY3string_types   auth
   authpriv	   cron   daemon   ftpkern   lpr   mail   newssecurity   sysloguser   uucp   local0   local1   local2   local3   local4   local5   local6   local7versiondisable_existing_loggersFloggersINFOlevelconsolehandlersrootZerror_consoleT	propagatezgunicorn.errorqualnamezgunicorn.accesszlogging.StreamHandlerclassZgeneric	formatterz
sys.stdoutstreamz
sys.stderr
formattersz5%(asctime)s [%(process)d] [%(levelname)s] %(message)sformatz[%Y-%m-%d %H:%M:%S %z]datefmtzlogging.Formatterc              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>   A/home/ubuntu/projects/ifolica/build/gunicorn/gunicorn/glogging.py
<listcomp>^   s   	 zloggers.<locals>.<listcomp>)r?   r5   manager
loggerDictkeys)r5   existingr>   r>   rC   r0   Z   s    	c                   s.   e  Z d  Z d d   Z   f d d   Z   S)	SafeAtomsc             C   s`   t  j |   xL | j   D]> \ } } t | t  rN | j d d  |  | <q | |  | <q Wd  S)N"z\")dict__init__items
isinstancer   replace)selfatomskeyvaluer>   r>   rC   rL   c   s
    zSafeAtoms.__init__c                sn   | j  d  rD | j   } | |  k r= t t |   j |  Sd Sn  | |  k rf t t |   j |  Sd Sd  S)N{-)
startswithlowersuperrI   __getitem__)rP   kkl)	__class__r>   rC   rY   k   s    zSafeAtoms.__getitem__)__name__
__module____qualname__rL   rY   r>   r>   )r\   rC   rI   a   s   rI   c             C   s  |  j  d  r| t j } |  j d d  } t |  d k re | d }  | d d k re t j } qe n  | |  j d  d f S|  j  d  r |  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   } nI d |  k rJ|  j d  d j   } n! |  d k r_d } n |  j   } |  j d  d }  d |  k r|  j d d  d } | j   st d |   n  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  )
rV   socketSOCK_STREAMsplitlen
SOCK_DGRAMRuntimeErrorrW   isdigitint)addrZ	sock_typepartssocktypehostportr>   r>   rC   parse_syslog_addressx   s<    	
&	rt   c               @   sG  e  Z d  Z i e j d 6e j d 6e j d 6e j d 6e j d 6Z	 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)   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   s   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_logr6   
access_logZerror_handlersZaccess_handlerslogfile	threadingLocklockcfgsetup)rP   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   qx Wt | j d  |  _ t j |  j j   t j j    t j |  j j   t j j    n  |  j |  j | j t j |  j |  j   | j d  k	 rM|  j |  j | j d t j |  j  n  | j r|  j |  j | |  j d  |  j |  j | |  j d  n  | j rt j j  | j  rt! j"   } | j | d <t j j# | j  | d <t$ | j d | d	 d
 qd } t% | | j   n  d  S)NrU   za+fmtrw   access__file__heredefaultsr/   Fz Error: log config '%s' not found)&
LOG_LEVELSgetloglevelrW   r?   r1   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	logconfigpathexistsCONFIG_DEFAULTScopydirnamer   rl   )rP   r   r:   r   msgr>   r>   rC   r      s8    $"%		
zLogger.setupc             O   s   |  j  j | | |  d  S)N)r{   rv   )rP   r   argskwargsr>   r>   rC   rv      s    zLogger.criticalc             O   s   |  j  j | | |  d  S)N)r{   rw   )rP   r   r   r   r>   r>   rC   rw      s    zLogger.errorc             O   s   |  j  j | | |  d  S)N)r{   rx   )rP   r   r   r   r>   r>   rC   rx      s    zLogger.warningc             O   s   |  j  j | | |  d  S)N)r{   ry   )rP   r   r   r   r>   r>   rC   ry      s    zLogger.infoc             O   s   |  j  j | | |  d  S)N)r{   rz   )rP   r   r   r   r>   r>   rC   rz      s    zLogger.debugc             O   s   |  j  j | | |  d  S)N)r{   	exception)rP   r   r   r   r>   r>   rC   r      s    zLogger.exceptionc             O   sM   t  | t  r0 |  j j | j   t j  } n  |  j j | | | |  d  S)N)	rN   r   r   r   rW   r?   r1   r{   log)rP   Zlvlr   r   r   r>   r>   rC   r      s    !z
Logger.logc       	      C   s-  | j  } t | t  r1 | j d d  d } n  i | j d d  d 6d d 6|  j |  p` d d 6|  j   d	 6d
 | d | d | d f d 6| d 6| j d  d 6| j d  d 6| j d  d 6| j d  d 6t | d d  r t | j  p d d 6t | d d  d 6| j d d  d 6| j d d  d 6| j	 d 6| j	 d | j
 d 6d  | j	 | j
 f d! 6d" t j   d# 6} t | d$  r| j } n | } t | d%  r| j   } n  | j t d& d'   | D   | j } t | d%  r	| j   } n  | j t d( d'   | D   | S))z' Gets atoms for log formating.
        Nr   r   ZREMOTE_ADDRrU   hlutz%s %s %sREQUEST_METHODZRAW_URIZSERVER_PROTOCOLrsmZ	PATH_INFOUQUERY_STRINGqHsentbBZHTTP_REFERERfZHTTP_USER_AGENTaTi@B Dz%d.%06dLz<%s>pheadersrM   c             S   s,   g  |  ]" \ } } d  | j    | f  q S)z{%s}i)rW   )rA   rZ   vr>   r>   rC   rD   )  s   	 z Logger.atoms.<locals>.<listcomp>c             S   s,   g  |  ]" \ } } d  | j    | f  q S)z{%s}o)rW   )rA   rZ   r   r>   r>   rC   rD   0  s   	 )statusrN   strri   r   	_get_usernowgetattrr   secondsmicrosecondsr   getpidhasattrr   rM   updaterK   )	rP   respreqenvironrequest_timer   rQ   Zreq_headersZresp_headersr>   r>   rC   rQ     sD    	
(
 	 zLogger.atomsc          	   C   s   |  j  j p! |  j  j p! |  j  j s( d S|  j |  j | | | |   } y |  j j |  j  j |  Wn |  j	 t
 j    Yn Xd S)z\ See http://httpd.apache.org/docs/2.0/logs.html#combined
        for format details
        N)r   r   r   r   atoms_wrapper_classrQ   r|   ry   Zaccess_log_formatrw   	traceback
format_exc)rP   r   r   r   r   Z
safe_atomsr>   r>   rC   r   4  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)rP   r>   r>   rC   r   G  s    z
Logger.nowc             C   sa  |  j  j r |  j  j d k r x$ t j t j f D] } | j   q1 W|  j  |  j d  k	 rn |  j j	   n  t
 |  j  j d  |  _ t j |  j j   t j j    t j |  j j   t j j    Wd  QXn  x t   D]| } xs | j D]h } t | t j  r | j   z5 | j rC| j j	   t
 | j | j  | _ n  Wd  | j   Xq q Wq Wd  S)NrU   za+)r   r   r   r   r   r   r   r   r}   closer   r   r   r   r0   r4   rN   r?   FileHandleracquirer:   baseFilenamemoderelease)rP   r:   r   handlerr>   r>   rC   reopen_filesK  s&    
"+
		zLogger.reopen_filesc             C   s   xx t    D]m } xd | j D]Y } t | t j  r | j   z& | j ra t j | j j	    n  Wd  | j
   Xq q Wq
 Wd  S)N)r0   r4   rN   r?   r   r   r:   r   close_on_execr   r   )rP   r   r   r>   r>   rC   r   d  s    
	zLogger.close_on_execc             C   s.   x' | j  D] } t | d d  r
 | Sq
 Wd  S)N	_gunicornF)r4   r   )rP   r   r   r>   r>   rC   _get_gunicorn_handlero  s    zLogger._get_gunicorn_handlerc             C   s   |  j  |  } | r( | j j |  n  | d  k	 r | d k rO t j   } nW t j |  t j |  } y& t j	 | j
 |  j j |  j j  Wn t k
 r Yn X| j |  d | _ | j |  n  d  S)NrU   T)r   r4   remover?   StreamHandlerr   Zcheck_is_writeabler   r   chownr   r   r   groupOSErrorsetFormatterr   
addHandler)rP   r   outputr   r   r>   r>   rC   r   t  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   } Wn t k
 r t	 d   Yn Xt
 | j  \ } } t j d k r t j j d | d	 | d
 |  }	 n t j j d | d	 |  }	 |	 j |  d |	 _ | j |	  d  S)Nrc   .zgunicorn.%s.%sz%s: %szunknown facility namer   r   addressfacilityrq   T)r   r   )Zsyslog_prefixZ	proc_namerO   r?   r   SYSLOG_FACILITIESZsyslog_facilityrW   KeyErrorrl   rt   Zsyslog_addrr   version_infor4   SysLogHandlerr   r   r   )
rP   r   r   r   rB   prefixr   rq   ro   r   r>   r>   rC   r     s$    				zLogger._set_syslog_handlerc             C   s>  d  } | j  d  } | r:| j d  r:| j d d  } t |  d k r:yP t j | d j   j d   } t r | j	 d  } n  | j d d  } Wnt t
 k
 r } z |  j d |  | SWYd  d  } ~ Xn< t j k
 r} z |  j d |  | SWYd  d  } ~ Xn Xt |  d k r7| d	 } q7q:n  | S)
NZHTTP_AUTHORIZATIONZBasic r   r   zutf-8rc   zCouldn't get username: %sr   )r   rV   ri   rj   base64	b64decodestripencoder   decode	TypeErrorrz   binasciiError)rP   r   r   Z	http_authr   excr>   r>   rC   r     s&    "zLogger._get_userN)#r]   r^   r_   r?   CRITICALERRORWARNINGr1   DEBUGr   r   r   r=   r   r   rI   r   rL   r   rv   rw   rx   ry   rz   r   r   rQ   r   r   r   r   r   r   r   r   r>   r>   r>   rC   ru      s<   



	*0#ru   )r   r   r   r?   ru   rE   emittedNoHandlerWarninglogging.configr   r   rg   r   r~   r   Zgunicornr   Zgunicorn.sixr   r   r   rK   r   r0   rI   rt   objectr>   r>   r>   rC   <module>   s   


,