Ë
    x[h  ã                   ó\  — d dl Zd dlZd dlZd dlZd dl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ZdZej"                  dz
  Z G d„ d	ej&                  «      Zej"                  dfd
„Zd„ Zdd„Zdd„Z G d„ dej2                  «      Zd„ Zd„ Z G d„ dej:                  «      Zd„ Zy)é    N)Údefaultdict)Úsuppress)ÚDefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)sé#   é   c                   ó   — e Zd ZdZd„ Zd„ Zy)Ú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ÚtracezCustomLoggerType.trace&   ó   € Øó    c                  ó   — y r   r   r   s      r   Ú
deprecatedzCustomLoggerType.deprecated)   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   r	      s   „ ñòór   r	   c                 ó4  — |xs t        j                  t        «      }t        j                  «       }t        j                  t
        j                  «      }|j                  |«       |j                  | «       |j                  |«       |j                  | «       y r   )
Ú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�%Õr   c                 óô   — | sy | j                   D ]E  }t        |t        j                  «      sŒt	        t
        «      5  |j                  «        d d d «       ŒG t        | j                  «       y # 1 sw Y   ŒgxY wr   )	ÚhandlersÚ
isinstancer   r    r   ÚIOErrorÚflushÚflush_loggersÚparent)r(   Úhs     r   r0   r0   7   sd   € ÙØØ�]‰]ò ˆÜ�aœ'×/Ñ/Õ1Üœ'Ó"ñ Ø—‘”	÷ð ðô �$—+‘+Õ÷ð ús   ½A.Á.A7	c                  ó  — d„ } t        j                  t        d«       t        j                  t        d«       t	        t         j
                  d | t        «      «       t	        t         j
                  d | t        «      «       y)z:Add DEPRECATED and TRACE log levels to the logging module.c                 ó   ‡ — ˆ fd„}|S )Nc                 óT   •— | j                  ‰«      r | j                  ‰||fi |¤Ž y y r   )ÚisEnabledForÚ_log)r   Úmessager   r   r&   s       €r   Úlog_at_levelz>define_extra_loggers.<locals>.new_logger.<locals>.log_at_levelE   s-   ø€ Ø× Ñ  Ô'Ø�—	‘	˜% ¨$Ñ9°&Ó9ð (r   r   )r&   r9   s   ` r   Ú
new_loggerz(define_extra_loggers.<locals>.new_loggerD   s   ø€ ô	:ð Ðr   Ú
DEPRECATEDÚTRACEr   r   N)r   ÚaddLevelNamer;   r<   ÚsetattrÚLogger)r:   s    r   Údefine_extra_loggersr@   A   sS   € òô ×Ñœ \Ô2Ü×Ñœ Ô(ÜŒG�N‰N˜L©*´ZÓ*@ÔAÜŒG�N‰N˜G¡Z´Ó%6Õ7r   c                 ó”  — | si } t        j                  «       }t        «       }|j                  t         j                  «       g }| j                  d«      }|r+t        |t        «      r|j                  t        |«      «       n§d| v r£| d   D ]›  }t        |t        «      r|j                  |«       Œ%t        |t        j                  j                  «      r9|D �cg c]  }t        |«      ‘Œ }}|j                  dj                  |«      «       Œ‚|j                  t        |«      «       Œ� d}|D ]–  }t        t        «      5  |dz  }|j                  d«      rt         j"                  j%                  |«      st'        j(                  |«      }t         j*                  j-                  |«       |j/                  |«       	 d d d «        y  |j/                  |«       | j                  dd«      }	t0        j2                  j5                  d	|z  «       |	r*t0        j2                  j5                  d
«       t7        «        y y c c}w # 1 sw Y   �ŒxY w)NÚlogcfgÚlog_cfgsú
r   é   ú/Ú	log_basicTz0WARN: no logging configured! (tried %s configs)
zSetting up basic logging...
)r   r   Ú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_loggingrd   Q   sä  € áØˆä×#Ñ#Ó%€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ÜÕð ùòQ 2÷	ñ 	ús   ÃH8Ä?A<H=È=I	c                   ód   — e Zd ZU  ee«      Zeeef   ed<   de	j                  fd„Zd„ Zd„ Zd„ Zy)rH   ÚholderÚrecordc                 óp   — | j                   |j                     j                  |j                  «       «       y r   )rf   Ú	levelnamerL   Ú
getMessage)r   rg   s     r   ÚemitzLogExporter.emit•   s(   € Ø�‰�F×$Ñ$Ñ%×,Ñ,¨V×->Ñ->Ó-@ÕAr   c                 ó@   — t        j                  | j                  «      S r   )ÚcopyÚdeepcopyrf   ©r   s    r   Úexport_logszLogExporter.export_logs˜   s   € Ü�}‰}˜TŸ[™[Ó)Ð)r   c                 ó,   — t        t        «      | _        y r   )r   Úlistrf   ro   s    r   Ú
clean_logszLogExporter.clean_logs›   s   € Ü!¤$Ó'ˆ�r   c                  ó   — y r   r   ro   s    r   r/   zLogExporter.flushž   r   r   N)r   r   r   r   rr   rf   r   rK   Ú__annotations__r   Ú	LogRecordrk   rp   rs   r/   r   r   r   rH   rH   ’   s=   … Ù%0°Ó%6€FˆK˜˜T˜	Ñ"Ó6ðB˜7×,Ñ,ó Bò*ò(ór   rH   c                  ó  — t        j                  «       } t        | j                  «      }|D ]3  }|j	                  «        |j                  «        | j                  |«       Œ5 | j                  t         j                  «       y)z0Remove all current handlers and unset log level.N)	r   r   rr   r,   r/   ÚcloseÚremoveHandlerr$   ÚNOTSET)Úlogr,   r2   s      r   Úreset_loggingr|   ¢   s_   € ä
×
Ñ
Ó
€CÜ�C—L‘LÓ!€HØò ˆØ	�‰Œ	Ø	�‰Œ	Ø×Ñ˜!Õðð ‡L�L”—‘Õ r   c                  óð   ‡— t        j                  t        j                  «      Št	        ‰dd„ «       ‰j                  t        j                  d«      «       ˆfd„} t	        t         j                  d| «       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                  ó   — y r   r   )rg   s    r   ú<lambda>z&setup_backup_logging.<locals>.<lambda>³   s   � r   z@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)sc                 ó�   •— t        t        «      5  ‰j                  |«       ‰j                  «        ddd«       y# 1 sw Y   yxY w)z;A closure that emits logs on stderr when other methods failN)r   r.   Úhandler/   )r   rg   Úfallback_handlers     €r   r~   z)setup_backup_logging.<locals>.handleErrorº   s:   ø€ ä”gÓñ 	%Ø×#Ñ# FÔ+Ø×"Ñ"Ô$÷	%÷ 	%ñ 	%ús	   ‘"<¼AN)r   r    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Õ8r   c                   ó"   ‡ — e Zd ZdZˆ fd„Zˆ xZS )Ú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| j                  k(  rLt        j                  j                  t        j                  j                  | j                  «      «      | _        y y )Nz__init__.py)ÚsuperÚ__init__ÚfilenamerS   rT   ÚbasenameÚdirnameÚpathname)r   r   r   Ú	__class__s      €r   rŠ   zCloudInitLogRecord.__init__É   sM   ø€ Ü‰Ñ˜$Ð) &Ò)Ø˜DŸM™MÒ)ÜŸG™G×,Ñ,¬R¯W©W¯_©_¸T¿]¹]Ó-KÓLˆD�Mð *r   )r   r   r   r   rŠ   Ú__classcell__)r�   s   @r   r‡   r‡   Ã   s   ø„ ñ÷
Mð Mr   r‡   c                  óP  — t         j                  t        j                  _        t        «        t        «        t        «        t        «       } | j                  t        j                  «       t        j                  «       j                  | «       t        j                  t        «       y)z(Customize the root logger for cloud-initN)ÚtimeÚgmtimer   r   Ú	converterr@   r…   r|   rH   r$   rI   r   r%   ÚsetLogRecordFactoryr‡   )Úhandlers    r   Úconfigure_root_loggerr—   Ï   sj   € ô #'§+¡+„G×ÑÔÜÔÜÔÜ„Oô ‹m€GØ×Ñ”W—\‘\Ô"Ü×ÑÓ×"Ñ" 7Ô+ô ×ÑÔ 2Õ3r   )ÚreturnNr   ) Úcollections.abcrM   rm   rV   r   Úlogging.configÚlogging.handlersrS   r!   r’   r   Ú
contextlibr   Útypingr   r   r;   ÚDEBUGr<   r?   r	   r*   r0   r@   rd   r    rH   r|   r…   rv   r‡   r—   r   r   r   ú<module>rŸ      s©   ðó Û Û 	Û Û Û Û 	Û 
Û Ý #Ý Ý àMÐ Ø€
Ø�‰˜Ñ€ô�w—~‘~ô ð  &Ÿm™m°tó òó8ó >ôB�'×'Ñ'ô ò !ò9ô,	M˜×*Ñ*ô 	Mó4r   