ó
    x[h  ã                   ób  • S SK rS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SKJ
r
  S SKJr  S SKJr  SrSr\R"                  S-
  r " S S	\R&                  5      r\R"                  S4S
 jrS rSS jrSS jr " S S\R2                  5      rS rS r " S S\R:                  5      rS rg)é    N)Údefaultdict)Úsuppress)ÚDefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)sé#   é   c                   ó$   • \ rS rSrSrS rS rSrg)ÚCustomLoggerTypeé   zë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                 ó   • g ©N© ©ÚselfÚargsÚkwargss      Ú7/usr/lib/python3/dist-packages/cloudinit/log/loggers.pyÚtraceÚCustomLoggerType.trace&   ó   € Øó    c                 ó   • g r   r   r   s      r   Ú
deprecatedÚCustomLoggerType.deprecated)   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__static_attributes__r   r   r   r	   r	      s   † ñòõr   r	   c                 óD  • U=(       d    [         R                  " [        5      n[         R                  " 5       n[         R                  " [
        R                  5      nUR                  U5        UR                  U 5        UR                  U5        UR                  U 5        g 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                 ó  • U (       d  g U R                    HL  n[        U[        R                  5      (       d  M$  [	        [
        5         UR                  5         S S S 5        MN     [        U R                  5        g ! , (       d  f       Mu  = fr   )	ÚhandlersÚ
isinstancer!   r%   r   ÚIOErrorÚflushÚflush_loggersÚparent)r-   Úhs     r   r5   r5   7   sY   € ÞØØ�]Œ]ˆÜ�aœ'×/Ñ/×1Ó1Üœ'Õ"Ø—‘”	÷ #Ñ"ñ ô �$—+‘+Õ÷ #Ö"ús   ÁA;Á;
B
	c                  ó
  • S n [         R                  " [        S5        [         R                  " [        S5        [	        [         R
                  SU " [        5      5        [	        [         R
                  SU " [        5      5        g)z:Add DEPRECATED and TRACE log levels to the logging module.c                 ó   ^ • U 4S jnU$ )Nc                 ó\   >• U R                  T5      (       a  U R                  " TX40 UD6  g g r   )ÚisEnabledForÚ_log)r   Úmessager   r   r+   s       €r   Úlog_at_levelÚ>define_extra_loggers.<locals>.new_logger.<locals>.log_at_levelE   s,   ø€ Ø× Ñ  ×'Ñ'Ø—	’	˜% Ñ9°&Ó9ð (r   r   )r+   r>   s   ` r   Ú
new_loggerÚ(define_extra_loggers.<locals>.new_loggerD   s   ø€ õ	:ð Ðr   Ú
DEPRECATEDÚTRACEr   r   N)r!   ÚaddLevelNamerB   rC   ÚsetattrÚLogger)r@   s    r   Údefine_extra_loggersrG   A   sS   € òô ×Òœ \Ô2Ü×Òœ Ô(ÜŒG�N‰N˜L©*´ZÓ*@ÔAÜŒG�N‰N˜G¡Z´Ó%6Õ7r   c                 ó  • U (       d  0 n [         R                  " 5       n[        5       nUR                  [         R                  5        / nU R                  S5      nU(       a0  [        U[        5      (       a  UR                  [        U5      5        OºSU ;   a´  U S    H«  n[        U[        5      (       a  UR                  U5        M+  [        U[        R                  R                  5      (       a=  U Vs/ s H  n[        U5      PM     nnUR                  SR                  U5      5        M‘  UR                  [        U5      5        M­     SnU H¡  n[        [        5         US-  nUR                  S5      (       a$  [         R"                  R%                  U5      (       d  [&        R(                  " U5      n[         R*                  R-                  U5        UR/                  U5         S S S 5          g    UR/                  U5        U R                  SS5      n	[0        R2                  R5                  S	U-  5        U	(       a*  [0        R2                  R5                  S
5        [7        5         g g s  snf ! , (       d  f       GM1  = f)NÚlogcfgÚlog_cfgsÚ
r   é   Ú/Ú	log_basicTz0WARN: no logging configured! (tried %s configs)
zSetting up basic logging...
)r!   r$   ÚLogExporterr)   ÚWARNÚgetr2   ÚstrÚappendÚcollectionsÚabcÚIterableÚjoinr   ÚFileNotFoundErrorÚ
startswithÚosÚpathÚisfileÚioÚStringIOÚconfigÚ
fileConfigr*   r&   r'   Úwriter/   )
ÚcfgÚroot_loggerÚexporterrJ   Úlog_cfgÚa_cfgÚcÚcfg_strÚam_triedÚbasic_enableds
             r   Úsetup_loggingrk   Q   sá  € æØˆä×#Ò#Ó%€KÜ‹}€HØ×Ñ”g—l‘lÔ#à€HØ�g‰g�hÓ€GÞ”:˜g¤s×+Ñ+ð 	�‰œ˜G›Õ%Ø	�sÓ	Ø˜”_ˆEÜ˜%¤×%Ñ%Ø—‘ Ö&Ü˜E¤K§O¡O×$<Ñ$<×>Ñ>Ù+0Ó1ª5 aœ3˜qž6©5�Ð1Ø—‘ §	¡	¨'Ó 2Ö3à—‘¤ E£
Ö+ñ %ð €Hó
 ˆô Ô'Õ(Ø˜‰MˆHð ×&Ñ& s×+Ñ+´·±·±¸w×0GÑ0GÜŸ+š+ gÓ.�ô �N‰N×%Ñ% gÔ.ð ×"Ñ" 8Ô,ð ÷ )Ñ(ñ	 ð* ×Ñ˜8Ô$ð —G‘G˜K¨Ó.€Mä‡J�J×ÑØ;¸xÑHôö Ü�
‰
×ÑÐ8Ô9ÜÕð ùòQ 2÷ )×(ús   Ã5I,Å"BI1É1
J	c                   ón   • \ rS rSr% \" \5      r\\\4   \	S'   S\
R                  4S jrS rS rS rSrg	)
rO   é’   ÚholderÚrecordc                 óp   • U R                   UR                     R                  UR                  5       5        g r   )rn   Ú	levelnamerS   Ú
getMessage)r   ro   s     r   ÚemitÚLogExporter.emit•   s(   € Ø�‰�F×$Ñ$Ñ%×,Ñ,¨V×->Ñ->Ó-@ÕAr   c                 óB   • [         R                  " U R                  5      $ r   )ÚcopyÚdeepcopyrn   ©r   s    r   Úexport_logsÚLogExporter.export_logs˜   s   € Ü�}Š}˜TŸ[™[Ó)Ð)r   c                 ó,   • [        [        5      U l        g r   )r   Úlistrn   rx   s    r   Ú
clean_logsÚLogExporter.clean_logs›   s   € Ü!¤$Ó'ˆ�r   c                 ó   • g r   r   rx   s    r   r4   ÚLogExporter.flushž   r   r   )rn   N)r   r   r   r   r   r|   rn   r   rR   Ú__annotations__r!   Ú	LogRecordrs   ry   r}   r4   r   r   r   r   rO   rO   ’   s=   ‡ Ù%0°Ó%6€FˆK˜˜T˜	Ñ"Ó6ðB˜7×,Ñ,ô Bò*ò(õr   rO   c                  ó
  • [         R                  " 5       n [        U R                  5      nU H4  nUR	                  5         UR                  5         U R                  U5        M6     U R                  [         R                  5        g)z0Remove all current handlers and unset log level.N)	r!   r$   r|   r1   r4   ÚcloseÚremoveHandlerr)   ÚNOTSET)Úlogr1   r7   s      r   Úreset_loggingrˆ   ¢   sZ   € ä
×
Ò
Ó
€CÜ�C—L‘LÓ!€HÛˆØ	�‰Œ	Ø	�‰Œ	Ø×Ñ˜!Öñ ð ‡L�L”—‘Õ r   c                  óö   ^• [         R                  " [        R                  5      m[	        TSS 5        TR                  [         R                  " S5      5        U4S jn [	        [         R                  SU 5        g)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                 ó   • g r   r   )ro   s    r   Ú<lambda>Ú&setup_backup_logging.<locals>.<lambda>³   s   € ¸Dr   z@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)sc                 óš   >• [        [        5         TR                  U5        TR                  5         SSS5        g! , (       d  f       g= f)z;A closure that emits logs on stderr when other methods failN)r   r3   Úhandler4   )r   ro   Úfallback_handlers     €r   rŠ   Ú)setup_backup_logging.<locals>.handleErrorº   s1   ø€ ä”gÕØ×#Ñ# FÔ+Ø×"Ñ"Ô$÷ ×Öús	   ‘"<¼
A
N)r!   r%   r&   r'   rE   r(   r"   ÚHandler)rŠ   r�   s    @r   Úsetup_backup_loggingr“   ­   s^   ø€ ô
 ×,Ò,¬S¯Z©ZÓ8ÐÜÐ˜mÑ-@ÔAØ×!Ñ!Ü×ÒØNó	
ôõ%ô ŒG�O‰O˜]¨KÕ8r   c                   ó,   ^ • \ rS rSrSrU 4S jrSrU =r$ )ÚCloudInitLogRecordéÃ   zŠ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U ]  " U0 UD6  SU R                  :X  aL  [        R                  R                  [        R                  R                  U R                  5      5      U l        g g )Nz__init__.py)ÚsuperÚ__init__ÚfilenamerZ   r[   ÚbasenameÚdirnameÚpathname)r   r   r   Ú	__class__s      €r   r™   ÚCloudInitLogRecord.__init__É   sM   ø€ Ü‰Ò˜$Ð) &Ò)Ø˜DŸM™MÓ)ÜŸG™G×,Ñ,¬R¯W©W¯_©_¸T¿]¹]Ó-KÓLˆD�Mð *r   )rš   )r   r   r   r   r   r™   r   Ú__classcell__)rž   s   @r   r•   r•   Ã   s   ø† ñ÷
Mó Mr   r•   c                  óT  • [         R                  [        R                  l        [        5         [        5         [        5         [        5       n U R                  [        R                  5        [        R                  " 5       R                  U 5        [        R                  " [        5        g)z(Customize the root logger for cloud-initN)ÚtimeÚgmtimer!   r"   Ú	converterrG   r“   rˆ   rO   r)   rP   r$   r*   ÚsetLogRecordFactoryr•   )Úhandlers    r   Úconfigure_root_loggerr§   Ï   sj   € ô #'§+¡+„G×ÑÔÜÔÜÔÜ„Oô ‹m€GØ×Ñ”W—\‘\Ô"Ü×ÒÓ×"Ñ" 7Ô+ô ×ÒÔ 2Õ3r   )ÚreturnNr   ) Úcollections.abcrT   rv   r]   r!   Úlogging.configÚlogging.handlersrZ   r&   r¢   r   Ú
contextlibr   Útypingr   r#   rB   ÚDEBUGrC   rF   r	   r/   r5   rG   rk   r%   rO   rˆ   r“   r‚   r•   r§   r   r   r   Ú<module>r¯      s©   ðó Û Û 	Û Û Û Û 	Û 
Û Ý #Ý Ý àMÐ Ø€
Ø�‰˜Ñ€ô�w—~‘~ô ð  &Ÿm™m°tô òô8ô >ôB�'×'Ñ'ô ò !ò9ô,	M˜×*Ñ*ô 	Mó4r   