o
    Dfk#                     @   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 )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)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__ G/home/ubuntu/webapp/venv/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}|st }| 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 )zSetup 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$     