o
    wvXjÝ#  ã                   @   sî   d Z ddlmZm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 dd	l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e%ƒ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.
é    )Úabsolute_importÚunicode_literalsN)ÚWatchedFileHandler)Úset_default_encoding_file)Úsignals)Úget_current_task)Ústring_t)Úclass_property)Úisatty)Ú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dd„ ZdS )r   z1Formatter for tasks, adding the task name and id.c                 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Ú
setdefaultr   Úformat)ÚselfÚrecordÚtask© r"   úK/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/app/log.pyr   &   s   
ÿzTaskFormatter.formatN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   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d0d"d#„Zd0d$d%„Zed&d'„ ƒZejd(d'„ ƒZdS )1r   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__9   s
   zLogging.__init__NÚWARNINGc                 C   sX   t |ƒ}| j||||d�}|s|r|  |¡ tjj|rt|ƒnd|r&t|ƒndd� |S )N)r2   ÚhostnameÚ )ÚCELERY_LOG_LEVELÚCELERY_LOG_FILE)r   Úsetup_logging_subsystemÚredirect_stdoutsÚosÚenvironr   Ústr)r   r,   Úlogfiler:   Úredirect_levelr2   r5   Ú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,   Ú1r6   )ÚCELERY_LOG_REDIRECTÚCELERY_LOG_REDIRECT_LEVEL)Úredirect_stdouts_to_loggerr   r;   r<   r   r=   )r   r,   r   r"   r"   r#   r:   O   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,   r>   r   r2   Úceleryúcelery.taskrB   ©rG   Úloggerr,   r>   r   r2   )r2   r   r6   )Ú_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   Ú
isinstancer   r;   r<   r   r=   )r   r,   r>   r   r2   r5   ÚkwargsÚ	receiversÚrootr[   Úlogfile_namer"   r"   r#   r9   X   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   rK   r>   r,   r   r2   r_   r"   r"   r#   rW   •   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.
        rI   Ú	formatterNrJ   )r   r,   r0   rQ   rc   r   r   rd   ÚintÚ	propagater   Úafter_setup_task_loggerrS   )r   r,   r>   r   r2   rg   r_   rK   r"   r"   r#   rZ   �   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   rK   r,   rj   rk   Úproxyr"   r"   r#   rF   ¸   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tjƒS |S )NF)r2   r)   Ú
IS_WINDOWSr
   ri   rk   )r   r2   r>   r"   r"   r#   rQ   È   s   zLogging.supports_colorc                 C   s   t |  ||¡d�S )N)Úenabled)r   rQ   )r   r>   rn   r"   r"   r#   r   Ó   s   zLogging.coloredc                 K   s8   |   |¡r|S |  |¡}| |||d�¡ | |¡ |S )N)Ú	use_color)Ú_is_configuredÚ_detect_handlerÚsetFormatterÚ
addHandler)r   rK   r>   r   r2   re   r_   Úhandlerr"   r"   r#   rc   Ö   s   


zLogging.setup_handlersc                 C   s.   |du rt jn|}t|dƒrt |¡S t|ƒS )z@Create handler from filename, an open stream or `None` (stderr).NÚwrite)ri   Ú
__stderr__Úhasattrr*   ÚStreamHandlerr   )r   r>   r"   r"   r#   rq   ß   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(   )r^   r*   ÚNullHandler)Ú.0Úhr"   r"   r#   Ú	<genexpr>ç   s
   € ÿ
ÿz'Logging._has_handler.<locals>.<genexpr>)ÚanyrV   ©r   rK   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#   rp   ì   s   ÿzLogging._is_configuredrH   c                 O   s   | j |i |¤Ž tjS )zDeprecated: No longer used.)r9   r*   ra   )r   r   Úargsr_   r"   r"   r#   Úsetup_loggerð   s   zLogging.setup_loggerc                 K   s   t |ƒS r(   )r   )r   r   r_   r"   r"   r#   Úget_default_loggerõ   s   zLogging.get_default_loggerc                 C   s   | j S r(   ©rP   )r   r"   r"   r#   rO   ø   s   zLogging.already_setupc                 C   s
   || _ d S r(   r…   )r   Ú	was_setupr"   r"   r#   rO   ü   s   
)NNFr4   NN)NrB   )NNNNN)NNNNF)NTT)NNr(   )rH   )r$   r%   r&   r'   rP   r3   rA   r:   r9   rW   rZ   rF   rQ   r   r   rc   rq   r   rp   rƒ   r„   r	   rO   Úsetterr"   r"   r"   r#   r   1   s>    
ÿ
	
ÿ=
ÿ
ÿ


ÿ
	


r   )'r'   Ú
__future__r   r   r*   r;   ri   Úlogging.handlersr   Úkombu.utils.encodingr   rH   r   Úcelery._stater   Úcelery.fiver   Úcelery.localr	   Úcelery.platformsr
   Úcelery.utils.logr   r   r   r   r   r   Úcelery.utils.nodenamesr   Úcelery.utils.termr   Ú__all__r<   Úgetr   r   Úobjectr   r"   r"   r"   r#   Ú<module>   s&    