o
    ›¨Êhk#  ã                   @   sÜ   d 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 ddlmZmZ ddlmZ dd	lmZmZmZmZmZmZ dd
lmZ ddlmZ dZej dd¡Z G dd„ deƒZ!G dd„ dƒZ"dS )zæLogging configuration.

The Celery instances logging section: ``Celery.log``.

Sets up logging for the worker and other programs,
redirects standard outs, colors log output, patches logging
related compatibility fixes, and so on.
é    N)ÚWatchedFileHandler)Úset_default_encoding_file)Úsignals)Úget_current_task)ÚCDeprecationWarningÚCPendingDeprecationWarning)Úclass_property)ÚColorFormatterÚLoggingProxyÚ
get_loggerÚget_multiprocessing_loggerÚmlevelÚreset_multiprocessing_logger)Únode_format)Úcolored)ÚTaskFormatterÚLoggingÚMP_LOGFc                       s    e Zd ZdZ‡ fdd„Z‡  ZS )r   z1Formatter for tasks, adding the task name and id.c                    sP   t ƒ }|r|jr|jj|jj|jd� n|j dd¡ |j dd¡ tƒ  |¡S )N)Útask_idÚ	task_namer   z???r   )	r   ÚrequestÚ__dict__ÚupdateÚidÚnameÚ
setdefaultÚsuperÚformat)ÚselfÚrecordÚtask©Ú	__class__© ú@/var/www/html/env/lib/python3.10/site-packages/celery/app/log.pyr   "   s   
ÿzTaskFormatter.format)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Ú__classcell__r#   r#   r!   r$   r      s    r   c                   @   sÄ   e Zd ZdZdZdd„ Z		d'dd„Zd(d
d„Z		d)dd„Zdd„ Z			d*dd„Z
		d+dd„Zd,dd„Zd,dd„Zefdd„Zd-dd„Zdd„ Zdd „ Zd.d"d#„Zed$d%„ ƒZejd&d%„ ƒZdS )/r   z$Application logging setup (app.log).Fc                 C   s:   || _ ttjƒ| _| j jj| _| j jj| _	| j jj
| _d S ©N)Úappr   ÚloggingÚWARNÚloglevelÚconfÚworker_log_formatr   Úworker_task_log_formatÚtask_formatÚworker_log_colorÚcolorize)r   r+   r#   r#   r$   Ú__init__5   s
   zLogging.__init__NÚWARNINGc                 C   s~   t |ƒ}| j||||d�}|s|r|  |¡ tjj|rt|ƒnd|r&t|ƒndd� tjdt	d� tjdt
d� t d¡ |S )N)r4   ÚhostnameÚ )ÚCELERY_LOG_LEVELÚCELERY_LOG_FILEÚalways)ÚcategoryT)r   Úsetup_logging_subsystemÚredirect_stdoutsÚosÚenvironr   ÚstrÚwarningsÚfilterwarningsr   r   r,   ÚcaptureWarnings)r   r.   Úlogfiler>   Úredirect_levelr4   r7   Úhandledr#   r#   r$   Úsetup<   s   ÿ
þ
zLogging.setupúcelery.redirectedc                 C   s.   | j t|ƒ|d� tjjdt|pdƒd� d S )N)r.   Ú1r8   )ÚCELERY_LOG_REDIRECTÚCELERY_LOG_REDIRECT_LEVEL)Úredirect_stdouts_to_loggerr   r?   r@   r   rA   )r   r.   r   r#   r#   r$   r>   M   s   ÿ

þzLogging.redirect_stdoutsc              	   K   sd  | j rd S |r|rt||ƒ}dt_t|p| jƒ}|p| j}|  ||¡}tƒ  t	j
jd ||||d�}|s‚t ¡ }| jjjrNg |_g tdƒ_g tdƒ_g tdƒ_| j|||||fi |¤Ž | jtƒ |trd|ntj||fi |¤Ž t	jjd |||||d� | j|||d� z
t ¡ jd j}	W n ttfy—   Y nw t|	ƒ t|tƒr£|nd	}
tj j!t|ƒ|
|d
� |S )NT)Úsenderr.   rE   r   r4   Úceleryúcelery.taskrI   ©rN   Úloggerr.   rE   r   r4   )r4   r   r8   )Ú_MP_FORK_LOGLEVEL_Ú_MP_FORK_LOGFILE_Ú_MP_FORK_LOGFORMAT_)"Úalready_setupr   r   Ú_setupr   r.   r   Úsupports_colorr   r   Úsetup_loggingÚsendr,   Ú	getLoggerr+   r/   Úworker_hijack_root_loggerÚhandlersr   Ú_configure_loggerr   r   ÚERRORÚafter_setup_loggerÚsetup_task_loggersÚstreamÚAttributeErrorÚ
IndexErrorr   Ú
isinstancerA   r?   r@   r   )r   r.   rE   r   r4   r7   ÚkwargsÚ	receiversÚrootrb   Úlogfile_namer#   r#   r$   r=   V   sd   

þ




ÿÿýýýÿþzLogging.setup_logging_subsystemc                 K   s:   |d ur| j ||||fi |¤Ž |r| |¡ d S d S d S r*   )Úsetup_handlersÚsetLevel)r   rR   rE   r.   r   r4   rf   r#   r#   r$   r^   “   s   
ÿÿüzLogging._configure_loggerc                 K   st   t |p| jƒ}|p| j}|  ||¡}| jtdƒ|||fdti|¤Ž}| |¡ t|ƒ|_	t
jjd|||||d� |S )z”Setup the task logger.

        If `logfile` is not specified, then `sys.stderr` is used.

        Will return the base task logger object.
        rP   Ú	formatterNrQ   )r   r.   r2   rX   rj   r   r   rk   ÚintÚ	propagater   Úafter_setup_task_loggerrZ   )r   r.   rE   r   r4   rn   rf   rR   r#   r#   r$   ra   ›   s&   
þýý

ýzLogging.setup_task_loggersTc                 C   s"   t ||ƒ}|r
|t_|r|t_|S )a  Redirect :class:`sys.stdout` and :class:`sys.stderr` to logger.

        Arguments:
            logger (logging.Logger): Logger instance to redirect to.
            loglevel (int, str): The loglevel redirected message
                will be logged as.
        )r
   ÚsysÚstdoutÚstderr)r   rR   r.   rq   rr   Úproxyr#   r#   r$   rM   ¶   s   
	z"Logging.redirect_stdouts_to_loggerc                 C   s@   |d u r| j n|}| jjrdS |s|d u r|d u otj ¡ S |S )NF)r4   r+   Ú
IS_WINDOWSrp   rr   Úisatty)r   r4   rE   r#   r#   r$   rX   Æ   s   zLogging.supports_colorc                 C   s   t |  ||¡d�S )N)Úenabled)r   rX   )r   rE   rv   r#   r#   r$   r   Ñ   s   zLogging.coloredc                 K   s8   |   |¡r|S |  |¡}| |||d�¡ | |¡ |S )N)Ú	use_color)Ú_is_configuredÚ_detect_handlerÚsetFormatterÚ
addHandler)r   rR   rE   r   r4   rl   rf   Úhandlerr#   r#   r$   rj   Ô   s   


zLogging.setup_handlersc                 C   s2   |du rt jn|}t|dƒrt |¡S t|dd�S )z@Create handler from filename, an open stream or `None` (stderr).NÚwritezutf-8)Úencoding)rp   Ú
__stderr__Úhasattrr,   ÚStreamHandlerr   )r   rE   r#   r#   r$   ry   Ý   s   

zLogging._detect_handlerc                 C   s   t dd„ |jpg D ƒƒS )Nc                 s   s   � | ]
}t |tjƒ V  qd S r*   )re   r,   ÚNullHandler)Ú.0Úhr#   r#   r$   Ú	<genexpr>å   s
   € ÿ
ÿz'Logging._has_handler.<locals>.<genexpr>)Úanyr]   ©r   rR   r#   r#   r$   Ú_has_handlerä   s   þzLogging._has_handlerc                 C   s   |   |¡ot|ddƒ S )NÚ_rudimentary_setupF)rˆ   Úgetattrr‡   r#   r#   r$   rx   ê   s   ÿzLogging._is_configuredrO   c                 K   s   t |ƒS r*   )r   )r   r   rf   r#   r#   r$   Úget_default_loggerî   s   zLogging.get_default_loggerc                 C   s   | j S r*   ©rW   )r   r#   r#   r$   rV   ñ   s   zLogging.already_setupc                 C   s
   || _ d S r*   rŒ   )r   Ú	was_setupr#   r#   r$   rV   õ   s   
)NNFr6   NN)NrI   )NNNNN)NNNNF)NTT)NNr*   )rO   )r%   r&   r'   r(   rW   r5   rH   r>   r=   r^   ra   rM   rX   r   r	   rj   ry   rˆ   rx   r‹   r   rV   Úsetterr#   r#   r#   r$   r   -   s<    
ÿ
	
ÿ=
ÿ
ÿ


ÿ
	

r   )#r(   r,   r?   rp   rB   Úlogging.handlersr   Úkombu.utils.encodingr   rO   r   Úcelery._stater   Úcelery.exceptionsr   r   Úcelery.localr   Úcelery.utils.logr	   r
   r   r   r   r   Úcelery.utils.nodenamesr   Úcelery.utils.termr   Ú__all__r@   Úgetr   r   r   r#   r#   r#   r$   Ú<module>   s$     