fddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddlm Z ddl m Z ddl mZdZdZej"dfdZdZefd Zdd ZGd d ej,Zd ZdZGddej4ZdZy)N) defaultdict)suppress) DefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)s#c4|xstjt}tj}tjt j }|j||j||j||j|yN) logging FormatterDEFAULT_LOG_FORMAT getLogger StreamHandlersysstderr setFormattersetLevel addHandler)level formatterrootconsoles //usr/lib/python3/dist-packages/cloudinit/log.pysetup_basic_loggingrsnBW../ABI    D##CJJ/G # UOOGMM%c|sy|jD]E}t|tjst t 5|j dddGt|jy#1swYgxYwr) handlers isinstancer r rIOErrorflush flush_loggersparent)rhs rrr&sd  ]] a'// 1'"    $++  s A..A7 cftjdfd}|tj_y)N DEPRECATEDcT|jr|j||fi|yyr) isEnabledFor_log)selfmessageargskwargslvls r deprecatedz-define_deprecation_logger..deprecated3s-   S ! DIIc7D 3F 3 "r)r addLevelNameLoggerr,)r+r,s` rdefine_deprecation_loggerr/0s& l+4!+GNNrc|si}tj}t}|jtjg}|j d}|r+t |tr|jt|nd|vr|dD]}t |tr|j|%t |tjjr9|Dcgc] }t|}}|jdj||jt|d}|D]}tt5|dz }|jdrt j"j%|st'j(|}tj*j-||j/| dddy|j/||j dd} t0j2j5d |z| r*t0j2j5d t7yycc}w#1swYxYw) Nlogcfglog_cfgs r/ log_basicTz0WARN: no logging configured! (tried %s configs) zSetting up basic logging... )r r LogExporterrWARNgetrstrappend collectionsabcIterablejoinrFileNotFoundError startswithospathisfileioStringIOconfig fileConfigrrrwriter) cfg root_loggerexporterr2log_cfga_cfgccfg_stram_tried basic_enableds r setup_loggingrS:s ##%K}H gll#HgghG:gs+ G % s _ ,E%%&EKOO$<$<>+01a3q611 ' 23E + ,H ' (  MH&&s+w0G++g. NN % %g .  " "8 ,    *8$GGK.MJJ;xH 89Q2  sH8?A->-@Arc@tj|jSr)copydeepcopyrUr's r export_logszLogExporter.export_logss}}T[[))rcyrr^s rrzLogExporter.flushs rN)__name__ __module__ __qualname__rlistrUrr:__annotations__r LogRecordrZr_rrarrr7r7{s8%0%6FKT "6B7,,B* rr7ctj}t|j}|D]3}|j |j |j |5|jtjy)z0Remove all current handlers and unset log level.N) r r rerrclose removeHandlerrNOTSET)logrr!s r reset_loggingrms_    CCLL!H      !LL rctjtjd_j tj dfd}|tj_y)zIn 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. cyrra)rVs rz&setup_backup_logging..srz@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)sctt5j|jdddy#1swYyxYw)z;A closure that emits logs on stderr when other methods failN)rrhandler)r'rVfallback_handlers r handleErrorz)setup_backup_logging..handleErrors: g  %  # #F +  " " $ % % %s "<AN)r r rrrtrr Handler)rtrss @rsetup_backup_loggingrvsU ,,SZZ8#6 !! N  % #.GOOrc"eZdZdZfdZxZS)CloudInitLogRecordzreporting the filename as __init__.py isn't very useful in logs if the filename is __init__.py, use the parent directory as the filename ct||i|d|jk(rLtjj tjj |j|_yy)Nz __init__.py)super__init__filenamerBrCbasenamedirnamepathname)r'r)r* __class__s rr{zCloudInitLogRecord.__init__sM $)&) DMM )GG,,RWW__T]]-KLDM *r)rbrcrd__doc__r{ __classcell__)rs@rrxrxs MMrrxcPtjtj_t t tt}|jtjtjj|tjty)z(Customize the root logger for cloud-initN)timegmtimer r converterr/rvrmr7rr8r rsetLogRecordFactoryrx)handlers rconfigure_root_loggerrsj#'++GOmG W\\" ""7+  23rr)collections.abcr<r\rEr logging.configlogging.handlersrBrrr contextlibrtypingrr r#DEBUGrrr/rSr r7rmrvrgrxrrarrrs  #M  &mmt#-+>B  '''  !., M** M4r