U
    cc#                     @   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 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 )zLogging 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)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 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__ H/var/www/html/project/venv/lib/python3.8/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 )0r   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confZworker_log_formatr   Zworker_task_log_formattask_formatZworker_log_colorcolorize)r   r,   r$   r$   r%   __init__7   s
    zLogging.__init__NWARNINGc                 C   s~   t |}| j||||d}|s,|r,| | tjj|r>t|nd|rLt|ndd tjdt	d tjdt
d td |S )N)r2   hostname )ZCELERY_LOG_LEVELZCELERY_LOG_FILEalways)categoryT)r   setup_logging_subsystemredirect_stdoutsosenvironr   strwarningsfilterwarningsr   r   r-   captureWarnings)r   r/   logfiler:   Zredirect_levelr2   r5   Z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   )ZCELERY_LOG_REDIRECTZCELERY_LOG_REDIRECT_LEVEL)redirect_stdouts_to_loggerr   r;   r<   r   r=   )r   r/   r   r$   r$   r%   r:   P   s     
zLogging.redirect_stdoutsc              	   K   sb  | j r
d S |r|rt||}dt_t|p,| j}|p8| j}| ||}t  t	j
jd ||||d}|st }| jjjrg |_g td_g td_g td_| j|||||f| | jt |tr|ntj||f| t	jjd |||||d | j|||d zt jd j}	W n ttfk
r*   Y n
X t|	 t|trD|nd	}
tj j!t||
|d
 |S )NT)senderr/   rA   r   r2   celerycelery.taskrC   rF   loggerr/   rA   r   r2   )r2   r   r6   )Z_MP_FORK_LOGLEVEL_Z_MP_FORK_LOGFILE_Z_MP_FORK_LOGFORMAT_)"already_setupr   r   _setupr   r/   r   supports_colorr   r   setup_loggingsendr-   	getLoggerr,   r0   Zworker_hijack_root_loggerhandlersr   _configure_loggerr   r   ERRORZafter_setup_loggersetup_task_loggersstreamAttributeError
IndexErrorr   
isinstancer=   r;   r<   r   )r   r/   rA   r   r2   r5   kwargsZ	receiversrootrU   Zlogfile_namer$   r$   r%   r9   Y   sz    

   



         zLogging.setup_logging_subsystemc                 K   s.   |d k	r*| j ||||f| |r*|| d S r+   )setup_handlerssetLevel)r   rJ   rA   r/   r   r2   rY   r$   r$   r%   rR      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 )zSetup the task logger.

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

        Will return the base task logger object.
        rH   	formatterNrI   )r   r/   r1   rM   r[   r   r   r\   int	propagater   Zafter_setup_task_loggerrO   )r   r/   rA   r   r2   r_   rY   rJ   r$   r$   r%   rT      s0    
  

   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   rJ   r/   ra   rb   proxyr$   r$   r%   rE      s    	
z"Logging.redirect_stdouts_to_loggerc                 C   s@   |d kr| j n|}| jjrdS |s*|d kr<|d ko:ttjS |S )NF)r2   r,   Z
IS_WINDOWSr	   r`   rb   )r   r2   rA   r$   r$   r%   rM      s    zLogging.supports_colorc                 C   s   t | ||dS )N)enabled)r   rM   )r   rA   rd   r$   r$   r%   r      s    zLogging.coloredc                 K   s8   |  |r|S | |}||||d || |S )N)Z	use_color)_is_configured_detect_handlersetFormatter
addHandler)r   rJ   rA   r   r2   r]   rY   handlerr$   r$   r%   r[      s    


zLogging.setup_handlersc                 C   s2   |dk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)r`   
__stderr__hasattrr-   StreamHandlerr   )r   rA   r$   r$   r%   rf      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+   )rX   r-   NullHandler).0hr$   r$   r%   	<genexpr>   s   z'Logging._has_handler.<locals>.<genexpr>)anyrQ   r   rJ   r$   r$   r%   _has_handler   s    zLogging._has_handlerc                 C   s   |  |ot|dd S )NZ_rudimentary_setupF)ru   getattrrt   r$   r$   r%   re      s
      zLogging._is_configuredrG   c                 K   s   t |S r+   )r   )r   r   rY   r$   r$   r%   get_default_logger   s    zLogging.get_default_loggerc                 C   s   | j S r+   rL   )r   r$   r$   r%   rK      s    zLogging.already_setupc                 C   s
   || _ d S r+   rx   )r   Z	was_setupr$   r$   r%   rK      s    )NNFr4   NN)NrC   )NNNNN)NNNNF)NTT)NN)NN)N)rG   )r&   r'   r(   r)   rL   r3   rB   r:   r9   rR   rT   rE   rM   r   r
   r[   rf   ru   re   rw   r   rK   setterr$   r$   r$   r%   r   /   sD         

	    
=    
    



	


r   )%r)   r-   r;   r`   r>   logging.handlersr   Zkombu.utils.encodingr   rG   r   Zcelery._stater   Zcelery.exceptionsr   r   Zcelery.localr   Zcelery.platformsr	   Zcelery.utils.logr
   r   r   r   r   r   Zcelery.utils.nodenamesr   Zcelery.utils.termr   __all__r<   getr   r   r   r$   r$   r$   r%   <module>   s$    