o
    [h;                  
   @   s  d dl Z 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 i dddd	d
ddddddd dddddddddddddddddd d!d"d#d$d%d&d'd(d)Zdd*d+d,gd-d+d.gd/d0d1d+d,gd/d2d1d3d4d5d6d7d4d5d8d7d9d5d:d;d<d=id>Zd?d@ ZG dAdB dBeZdCdD ZG dEdF dFZdS )G    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} t| jj }dd |D S )z get list of all loggers c                 S   s   g | ]}t |qS  )logging	getLogger).0namerB   rB   x/home/ubuntu/experiments/live_experiments/Pythonexperiments/Otree/venv/lib/python3.10/site-packages/gunicorn/glogging.py
<listcomp>\   s    zloggers.<locals>.<listcomp>)rC   r?   listmanager
loggerDictkeys)r?   existingrB   rB   rG   r@   X   s   r@   c                       s$   e Zd Zdd Z fddZ  ZS )	SafeAtomsc                 C   sD   t |  | D ]\}}t|tr|dd| |< q	|| |< q	d S )N"z\")dict__init__items
isinstancestrreplace)selfatomskeyvaluerB   rB   rG   rQ   a   s   


zSafeAtoms.__init__c                    sB   | dr| }|| v rt |S dS || v rt |S dS )N{-)
startswithlowersuper__getitem__)rV   kkl	__class__rB   rG   r_   i   s   
zSafeAtoms.__getitem__)__name__
__module____qualname__rQ   r_   __classcell__rB   rB   rb   rG   rN   _   s    rN   c                 C   sL  |  dr)d }| dd}t|dkr |d } |d dkr tj}|| dd fS |  dr9| dd } tj}n|  drI| dd } tj}ntd	d
| v rcd| v rc| dd dd   }nd| v rq| dd  }n| dkrxd}n|  }| dd } d| v r| ddd }| st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  )
r\   splitlensocket
SOCK_DGRAMSOCK_STREAMRuntimeErrorr]   isdigitint)addrZ	sock_typepartssocktypehostportrB   rB   rG   parse_syslog_addressv   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)rV   r   rB   rB   rG   rQ      s   
zLogger.__init__c                 C   sP  | j |j tj| _| j| j | jtj | j	j
rO|jdkrOtjtjfD ]}|  q)t|jd| _t| j tj  t| j tj  | | j|jt| j| j |jd urs| j| j|jt| jtjd |jr| | j|| jd |js| | j|| jd |jrt ! }|"|j zt#| W d S  t$t%t&t'fy } zt(t)|d }~ww |j*rt ! }tj+,|j*rzt-.t|j*}|"| t#| W d S  t-j/t$t%t&t'fy } zt(t)|d }~ww d S |j0r&tj+,|j0rt ! }|j0|d< tj+1|j0|d< t2|j0|dd	 d S d
}t(||j0 d S )Nr[   a+)fmtr8   r   access__file__hereF)defaultsr>   z Error: log config '%s' not found)3
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	TypeErrorrt   rT   logconfig_jsonpathexistsjsonloadJSONDecodeError	logconfigdirnamer   )rV   r   r8   configexcZconfig_jsonr   msgrB   rB   rG   r      s   




zLogger.setupc                 O      | j j|g|R i | d S N)r   r~   rV   r   argskwargsrB   rB   rG   r~        zLogger.criticalc                 O   r   r   )r   r   r   rB   rB   rG   r     r   zLogger.errorc                 O   r   r   )r   r   r   rB   rB   rG   r     r   zLogger.warningc                 O   r   r   )r   r   r   rB   rB   rG   r     r   zLogger.infoc                 O   r   r   )r   r   r   rB   rB   rG   r     r   zLogger.debugc                 O   r   r   )r   	exceptionr   rB   rB   rG   r     r   zLogger.exceptionc                 O   s>   t |tr| j| tj}| jj||g|R i | d S r   )	rS   rT   r   r   r]   rC   r-   r   log)rV   Zlvlr   r   r   rB   rB   rG   r     s   
 z
Logger.logc           
      C   s  |j }t|tr|ddd }i d|ddddd| |p"dd	|  d
d|d |d |d f d|d|dd|dd|dd|ddt|dddur_t|jp`ddt|ddd|ddd|ddd|j	d|j	d |j
 d |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&r| }|d)d( |D  | }	|d*d( |	D  |S )+z( Gets atoms for log formatting.
        Nr   r   hZREMOTE_ADDRr[   lutrz%s %s %sREQUEST_METHODZRAW_URIZSERVER_PROTOCOLsmUZ	PATH_INFOqZQUERY_STRINGHbsentBfZHTTP_REFERERaZHTTP_USER_AGENTTDi@B Mi  z%d.%06dz<%s>)LpheadersrR   c                 S      i | ]\}}d |   |qS )z{%s}ir]   rE   r`   vrB   rB   rG   
<dictcomp>I      z Logger.atoms.<locals>.<dictcomp>c                 S   r   )z{%s}or   r   rB   rB   rG   r   P  r   c                 S   r   )z{%s}er   r   rB   rB   rG   r   T  r   )statusrS   rT   ro   r   	_get_usernowgetattrr   secondsmicrosecondsrv   r   getpidhasattrr   rR   r   )
rV   respreqenvironrequest_timer   rW   Zreq_headersZresp_headersZenviron_variablesrB   rB   rG   rW   "  sr   


	







zLogger.atomsc                 C   s   | j js| j js| j js| j js| j jr| j jrdS | | ||||}z| j	
| j j| W dS  tyB   | t  Y dS w )z\ See http://httpd.apache.org/docs/2.0/logs.html#combined
        for format details
        N)r   r   r   r   r   r   r   atoms_wrapper_classrW   r   r   Zaccess_log_format	Exceptionr   	traceback
format_exc)rV   r   r   r   r   Z
safe_atomsrB   rB   rG   r   X  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)rV   rB   rB   rG   r   n  s   
z
Logger.nowc              
   C   s  | j jrT| j jdkrTtjtjfD ]}|  q| j2 | jd ur%| j	  t
| j jd| _t| j tj  t| j tj  W d    n1 sOw   Y  t D ]*}|jD ]$}t|tjr|  z|jru|	  | |_W |  q\|  w q\qWd S )Nr[   r   )r   r   r   r   r   r   r   r   r   closer   r   r   r   r@   r0   rS   rC   FileHandleracquirer8   _openrelease)rV   r8   r   handlerrB   rB   rG   reopen_filesr  s.   





zLogger.reopen_filesc              
   C   s^   t  D ])}|jD ]#}t|tjr+|  z|jr t|j	  W |
  q|
  w qqd S r   )r@   r0   rS   rC   r   r   r8   r   close_on_execr   r   )rV   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   )rV   r   r   rB   rB   rG   _get_gunicorn_handler  s
   
zLogger._get_gunicorn_handlerNc                 C   s   |  |}|r|j| |d urL|dkrt|}n"t| t|}zt	|j
| jj| jj W n	 ty<   Y nw || d|_|| d S d S )Nr[   T)r   r0   removerC   StreamHandlerr   Zcheck_is_writabler   r   chownbaseFilenamer   r   groupOSErrorsetFormatterr   
addHandler)rV   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y-   t	dw t
|j\}}tjj|||d}	|	| d|	_||	 d S )Nrk   .zgunicorn.%s.%sz%s: %szunknown facility name)addressfacilityry   T)Zsyslog_prefixZ	proc_namerU   rC   r   SYSLOG_FACILITIESZsyslog_facilityr]   KeyErrorrt   r|   Zsyslog_addrr0   SysLogHandlerr   r   r  )
rV   r   r   r   rF   prefixr  ry   rw   r   rB   rB   rG   r     s   
zLogger._set_syslog_handlerc              
   C   s   d }| d}|rT| drT|dd}t|dkrTzt|d  d}|ddd 	d	}W |S  t
tjtfyS } z| d
| W Y d }~|S d }~ww |S )NZHTTP_AUTHORIZATIONbasic r   r   zutf-8   :r   zUTF-8zCouldn't get username: %s)r   r]   r\   ro   rp   base64	b64decodestripencodedecoder   binasciiErrorUnicodeDecodeErrorr   )rV   r   r   Z	http_authr   r   rB   rB   rG   r     s   
zLogger._get_userr   )#rd   re   rf   rC   CRITICALERRORWARNINGr-   DEBUGr   r   r   r<   r   r   rN   r   rQ   r   r~   r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   rB   rB   rB   rG   r}      s>    H6
r}   )r  r  r   r   rC   r}   rJ   emittedNoHandlerWarninglogging.configr   r   r   rq   r   r   r   Zgunicornr   r  r   r@   rP   rN   r|   rB   rB   rB   rG   <module>   s   
	

).