name : loggers.cpython-39.opt-1.pyc
a

'�Dg�@sddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddlm
Z
ddlmZddl
mZdZdZejdZGdd	�d	ej�Zejdfd
d�Zdd
�Zdd�dd�Zddd�ZGdd�dej�Zdd�Zdd�ZGdd�dej�Zdd�ZdS)�N)�defaultdict)�suppress)�DefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)s�#�c@s eZdZdZdd�Zdd�ZdS)�CustomLoggerTypez�A hack to get mypy to stop complaining about custom logging methods.

    When using deprecated or trace logging, rather than:
        LOG = logging.getLogger(__name__)
    Instead do:
        LOG = cast(CustomLoggerType, logging.getLogger(__name__))
    cOsdS�N���self�args�kwargsr	r	�9/usr/lib/python3.9/site-packages/cloudinit/log/loggers.py�trace&szCustomLoggerType.tracecOsdSrr	r
r	r	r�
deprecated)szCustomLoggerType.deprecatedN)�__name__�
__module__�__qualname__�__doc__rrr	r	r	rrsrcCsN|pt�t�}t��}t�tj�}|�|�|�|�|�	|�|�|�dSr)
�logging�	Formatter�DEFAULT_LOG_FORMAT�	getLogger�
StreamHandler�sys�stderr�setFormatter�setLevel�
addHandler)�level�	formatter�rootZconsoler	r	r�setup_basic_logging-s


r"c	Cs^|sdS|jD]@}t|tj�rtt��|��Wd�q1sD0Yqt|j�dSr)	�handlers�
isinstancerrr�IOError�flush�
flush_loggers�parent)r!�hr	r	rr'7s

(r')�returncCsHdd�}t�td�t�td�ttjd|t��ttjd|t��dS)z:Add DEPRECATED and TRACE log levels to the logging module.cs�fdd�}|S)Ncs$|���r |j�||fi|��dSr)ZisEnabledForZ_log)r�messagerr
�rr	r�log_at_levelEs
z>define_extra_loggers.<locals>.new_logger.<locals>.log_at_levelr	)rr-r	r,r�
new_loggerDsz(define_extra_loggers.<locals>.new_logger�
DEPRECATED�TRACErrN)rZaddLevelNamer/r0�setattr�Logger)r.r	r	r�define_extra_loggersAs
r3c		Csr|si}t��}t�}|�tj�g}|�d�}|rNt|t�rN|�t|��nhd|vr�|dD]V}t|t�rx|�|�q^t|t	j
j�r�dd�|D�}|�d�|��q^|�t|��q^d}|D]p}t
t��R|d7}|�d�r�tj�|�s�t�|�}tj�|�|�|�Wd�dS1�s$0Yq�|�|�|�d	d
�}tj�d|�|�rntj�d�t�dS)
NZlogcfg�log_cfgscSsg|]}t|��qSr	)�str)�.0�cr	r	r�
<listcomp>e�z!setup_logging.<locals>.<listcomp>�
r��/Z	log_basicTz0WARN: no logging configured! (tried %s configs)
zSetting up basic logging...
)rr�LogExporterr�WARN�getr$r5�append�collections�abc�Iterable�joinr�FileNotFoundError�
startswith�os�path�isfile�io�StringIOZconfigZ
fileConfigrrr�writer")	ZcfgZroot_loggerZexporterr4Zlog_cfgZa_cfgZcfg_strZam_triedZ
basic_enabledr	r	r�
setup_loggingQsD




&
�rMc@sNeZdZUee�Zeeefed<e	j
d�dd�Zdd�Zdd�Z
d	d
�ZdS)r=�holder��recordcCs|j|j�|���dSr)rNZ	levelnamer@Z
getMessage�rrPr	r	r�emit�szLogExporter.emitcCst�|j�Sr)�copy�deepcopyrN�rr	r	r�export_logs�szLogExporter.export_logscCstt�|_dSr)r�listrNrUr	r	r�
clean_logs�szLogExporter.clean_logscCsdSrr	rUr	r	rr&�szLogExporter.flushN)rrrrrWrNrr5�__annotations__r�	LogRecordrRrVrXr&r	r	r	rr=�s

r=cCsFt��}t|j�}|D]}|��|��|�|�q|�tj�dS)z0Remove all current handlers and unset log level.N)	rrrWr#r&�closeZ
removeHandlerrZNOTSET)�logr#r)r	r	r�
reset_logging�s
r]csJt�tj��t�ddd����t�d���fdd�}ttjd|�dS)z�In the event that internal logging exception occurs and logging is not
    possible for some reason, make a desperate final attempt to log to stderr
    which may ease debugging.
    �handleErrorcSsdSrr	rOr	r	r�<lambda>�r9z&setup_backup_logging.<locals>.<lambda>z@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)scs>tt��"��|����Wd�n1s00YdS)z;A closure that emits logs on stderr when other methods failN)rr%Zhandler&rQ�Zfallback_handlerr	rr^�s

z)setup_backup_logging.<locals>.handleErrorN)rrrrr1rrZHandler)r^r	r`r�setup_backup_logging�s��racs eZdZdZ�fdd�Z�ZS)�CloudInitLogRecordz�reporting the filename as __init__.py isn't very useful in logs

    if the filename is __init__.py, use the parent directory as the filename
    cs8t�j|i|��d|jkr4tj�tj�|j��|_dS)Nz__init__.py)�super�__init__�filenamerGrH�basename�dirname�pathnamer
��	__class__r	rrd�s
zCloudInitLogRecord.__init__)rrrrrd�
__classcell__r	r	rirrb�srbcCsJtjtj_t�t�t�t�}|�	tj
�t���|�t�
t�dS)z(Customize the root logger for cloud-initN)�time�gmtimerrZ	converterr3rar]r=rr>rrZsetLogRecordFactoryrb)Zhandlerr	r	r�configure_root_logger�s
rn)N) �collections.abcrArSrJrZlogging.configZlogging.handlersrGrrlr�
contextlibr�typingrrr/�DEBUGr0r2rr"r'r3rMrr=r]rarZrbrnr	r	r	r�<module>s0



A

© 2025 Cubjrnet7