3 \me@sddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddlm Z ddl m Z ddl mZdZdZejdfddZd d Zefd d Zdd dZGdddejZddZddZddZdS)N) defaultdict)suppress) DefaultDictz6%(asctime)s - %(filename)s[%(levelname)s]: %(message)s#cCsN|p tjt}tj}tjtj}|j||j||j ||j|dS)N) logging FormatterDEFAULT_LOG_FORMAT getLogger StreamHandlersysstderr setFormattersetLevel addHandler)levelZ formatterrootZconsoler/usr/lib/python3.6/log.pysetup_basic_loggings    rc CsN|sdSx6|jD],}t|tjrtt|jWdQRXqWt|jdS)N) handlers isinstancerr rIOErrorflush flush_loggersparent)rhrrrr&s   rcs$tjdfdd}|tj_dS)N DEPRECATEDcs |jr|j||f|dS)N)Z isEnabledForZ_log)selfmessageargskwargs)lvlrr deprecated3s z-define_deprecation_logger..deprecated)rZ addLevelNameZLoggerr")r!r"r)r!rdefine_deprecation_logger0s  r#c Cs`|si}tj}t}|jtjg}|jd}|rNt|trN|jt|nld|krxb|dD]V}t|trz|j|q`t|t j j rdd|D}|jdj |q`|jt|q`Wd}x^|D]V}t tD|d7}|jdotjj|stj|}tjj||j|dSQRXqW|j||jd d }tjjd ||r\tjjd tdS) NZlogcfglog_cfgscSsg|] }t|qSr)str).0crrr Nsz!setup_logging.. r/Z log_basicTz0WARN: no logging configured! (tried %s configs) zSetting up basic logging... )rr LogExporterrWARNgetrr%append collectionsabcIterablejoinrFileNotFoundError startswithospathisfileioStringIOconfigZ fileConfigrr r writer) ZcfgZ root_loggerZexporterr$Zlog_cfgZa_cfgZcfg_strZam_triedZ basic_enabledrrr setup_logging:sB             r=c@sBeZdZUeeZeeefej dddZ ddZ ddZ dS) r,)recordcCs|j|jj|jdS)N)holderZ levelnamer/Z getMessage)rr>rrremit~szLogExporter.emitcCs tj|jS)N)copydeepcopyr?)rrrr export_logsszLogExporter.export_logscCsdS)Nr)rrrrrszLogExporter.flushN) __name__ __module__ __qualname__rlistr?rr%rZ LogRecordr@rCrrrrrr,{s r,cCsJtj}t|j}x&|D]}|j|j|j|qW|jtjdS)z0Remove all current handlers and unset log level.N) rr rGrrcloseZ removeHandlerrZNOTSET)logrrrrr reset_loggings  rJcs>tjtjdd_jtjdfdd}|tj_dS)zIn the event that internal logging exception occurs and logging is not possible for some reason, make a desparate final attempt to log to stderr which may ease debugging. cSsdS)Nr)r>rrrsz&setup_backup_logging..z@FALLBACK: %(asctime)s - %(filename)s[%(levelname)s]: %(message)sc s*ttj|jWdQRXdS)z;A closure that emits logs on stderr when other methods failN)rrZhandler)rr>)fallback_handlerrr handleErrors  z)setup_backup_logging..handleErrorN)rr r r rMr rZHandler)rMr)rLrsetup_backup_loggings   rNcCs@tjtj_tttt}|j tj tj j |dS)z(Customize the root logger for cloud-initN) timeZgmtimerrZ converterr#rNrJr,rr-r r)Zhandlerrrrconfigure_root_loggers  rP)N)collections.abcr0rAr9rZlogging.configZlogging.handlersr6r rOr contextlibrZtypingrrrDEBUGrrr#r=r r,rJrNrPrrrr s*     A