Current File : //usr/lib/python3/dist-packages/cloudinit/log/__pycache__/loggers.cpython-312.pyc
�

Ӈg��\�ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddlm
Z
ddlmZddl
mZdZdZej"dz
ZGd�d	ej&�Zej"dfd
�Zd�Zdd�Zdd
�ZGd�dej2�Zd�Zd�ZGd�dej:�Zd�Zy)�N)�defaultdict)�suppress)�DefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)s�#�c��eZdZdZd�Zd�Zy)�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__))
    c��y�N���self�args�kwargss   �7/usr/lib/python3/dist-packages/cloudinit/log/loggers.py�tracezCustomLoggerType.trace&����c��yrrr
s   r�
deprecatedzCustomLoggerType.deprecated)rrN)�__name__�
__module__�__qualname__�__doc__rrrrrr	r	s���
�
rr	c�4�|xstjt�}tj�}tjt
j�}|j|�|j|�|j|�|j|�yr)
�logging�	Formatter�DEFAULT_LOG_FORMAT�	getLogger�
StreamHandler�sys�stderr�setFormatter�setLevel�
addHandler)�level�	formatter�root�consoles    r�setup_basic_loggingr*-sn���B�W�.�.�/A�B�I�����D��#�#�C�J�J�/�G�����#����U���O�O�G���M�M�%�rc���|sy|jD]E}t|tj�s�t	t
�5|j
�ddd��Gt|j�y#1swY�gxYwr)	�handlers�
isinstancerr r�IOError�flush�
flush_loggers�parent)r(�hs  rr0r07sd����
�]�]����a�'�/�/�1��'�"�
����	�
�
���$�+�+��
�
�s�A.�.A7	c��d�}tjtd�tjtd�t	tj
d|t��t	tj
d|t��y)z:Add DEPRECATED and TRACE log levels to the logging module.c����fd�}|S)Nc�T��|j��r|j�||fi|��yyr)�isEnabledFor�_log)r�messagerrr&s    �r�log_at_levelz>define_extra_loggers.<locals>.new_logger.<locals>.log_at_levelEs-���� � ��'���	�	�%��$�9�&�9�(rr)r&r9s` r�
new_loggerz(define_extra_loggers.<locals>.new_loggerDs���	:��r�
DEPRECATED�TRACErrN)r�addLevelNamer;r<�setattr�Logger)r:s r�define_extra_loggersr@AsS�������\�2������(��G�N�N�L�*�Z�*@�A��G�N�N�G�Z��%6�7rc��|si}tj�}t�}|jtj�g}|jd�}|r+t
|t�r|jt|��n�d|vr�|dD]�}t
|t�r|j|��%t
|tjj�r9|D�cgc]
}t|���}}|jdj|����|jt|����d}|D]�}tt�5|dz
}|jd�rt j"j%|�st'j(|�}tj*j-|�|j/|�	ddd�y|j/|�|jdd�}	t0j2j5d	|z�|	r*t0j2j5d
�t7�yycc}w#1swY��xYw)N�logcfg�log_cfgs�
r��/�	log_basicTz0WARN: no logging configured! (tried %s configs)
zSetting up basic logging...
)rr�LogExporterr$�WARN�getr-�str�append�collections�abc�Iterable�joinr�FileNotFoundError�
startswith�os�path�isfile�io�StringIO�config�
fileConfigr%r!r"�writer*)
�cfg�root_logger�exporterrC�log_cfg�a_cfg�c�cfg_str�am_tried�
basic_enableds
          r�
setup_loggingrdQs�������#�#�%�K��}�H����g�l�l�#��H��g�g�h��G��:�g�s�+�	����G��%�	�s�	���_�	,�E��%��%�����&��E�K�O�O�$<�$<�>�+0�1�a�3�q�6�1��1�����	�	�'� 2�3�����E�
�+�	,��H�
����'�
(�	���M�H��&�&�s�+������w�0G��+�+�g�.��
�N�N�%�%�g�.�
�"�"�8�,�
�	�	�	�*���8�$��G�G�K��.�M��J�J���;�x�H����
�
���8�9�����Q2�	�	�s�H8�?A<H=�=I	c�d�eZdZUee�Zeeefed<de	jfd�Zd�Zd�Z
d�Zy)rH�holder�recordc�p�|j|jj|j��yr)rf�	levelnamerL�
getMessage)rrgs  r�emitzLogExporter.emit�s(�����F�$�$�%�,�,�V�->�->�-@�Arc�@�tj|j�Sr)�copy�deepcopyrf�rs r�export_logszLogExporter.export_logs�s���}�}�T�[�[�)�)rc�,�tt�|_yr)r�listrfros r�
clean_logszLogExporter.clean_logs�s��!�$�'��rc��yrrros rr/zLogExporter.flush�rrN)rrrrrrrfrrK�__annotations__r�	LogRecordrkrprsr/rrrrHrH�s=��%0��%6�F�K��T�	�"�6�B�7�,�,�B�*�(�
rrHc��tj�}t|j�}|D]3}|j	�|j�|j
|��5|jtj�y)z0Remove all current handlers and unset log level.N)	rrrrr,r/�close�
removeHandlerr$�NOTSET)�logr,r2s   r�
reset_loggingr|�s_��
�
�
�
�C��C�L�L�!�H�
���	���	�	���	����!����L�L���� rc����tjtj��t	�dd���jtjd���fd�}t	tjd|�y)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.
    �handleErrorc��yrr)rgs r�<lambda>z&setup_backup_logging.<locals>.<lambda>�s�rz@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)sc���tt�5�j|��j�ddd�y#1swYyxYw)z;A closure that emits logs on stderr when other methods failN)rr.�handler/)rrg�fallback_handlers  �rr~z)setup_backup_logging.<locals>.handleError�s:���
�g�
�	%��#�#�F�+��"�"�$�	%�	%�	%�s	�"<�AN)rr r!r"r>r#r�Handler)r~r�s @r�setup_backup_loggingr��s^���
�,�,�S�Z�Z�8����m�-@�A��!�!����N�	
��%��G�O�O�]�K�8rc�"��eZdZdZ�fd�Z�xZS)�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
    c����t�|�|i|��d|jk(rLtjjtjj
|j��|_yy)Nz__init__.py)�super�__init__�filenamerSrT�basename�dirname�pathname)rrr�	__class__s   �rr�zCloudInitLogRecord.__init__�sM���
���$�)�&�)��D�M�M�)��G�G�,�,�R�W�W�_�_�T�]�]�-K�L�D�M�*r)rrrrr��
__classcell__)r�s@rr�r��s����
M�Mrr�c�P�tjtj_t�t
�t�t�}|jtj�tj�j|�tjt�y)z(Customize the root logger for cloud-initN)�time�gmtimerr�	converterr@r�r|rHr$rIrr%�setLogRecordFactoryr�)�handlers r�configure_root_loggerr��sj��#'�+�+�G���������O��m�G����W�\�\�"�����"�"�7�+���� 2�3r)�returnNr) �collections.abcrMrmrVr�logging.config�logging.handlersrSr!r�r�
contextlibr�typingrrr;�DEBUGr<r?r	r*r0r@rdr rHr|r�rvr�r�rrr�<module>r�s�����	����	�
��#���M��
�
��
�
����

�w�~�~�

� &�m�m�t���
8� >�B

�'�'�'�

� !�9�,	M��*�*�	M�4r