3 Yd @sddlZddlZddlZddlZddlZddlZddljZddlZddl Z ddl Z yddl m Z Wnddl m Z YnXdgZ daiZe jZGdddeZddZdd Zd d Zd dZGd ddejZejejejejeejejdS)N)StringIOgetc@seZdZddZdS) LogHandlercCs||_||_dS)N)handlerstream)selfrrr/usr/lib/python3.6/logs.py__init__szLogHandler.__init__N)__name__ __module__ __qualname__r rrrr rsrcCs<tj}tjtj}d}xt|D]}||j|7}q"W|S)N)randomZ SystemRandomstringZ ascii_lettersZdigitsrangeZchoice)Zlengthrcharsresirrr _random_strings  rc Cstx&tdD]}td}|tkrPqWdSt}tj|}|j|tjd}|j |t j |t ||}|t|<t j d||SQRXdS)N z%%(levelname)-8s %(name)s: %(message)szAdded log handler %s.)log_handlers_lockrr log_handlersrlogging StreamHandlersetLevel Formatter setFormatter root_logger addHandlerrdebug)Z log_levelrtokenrrZ formatter log_handlerrrr log_capture_start$s"     r%cCsjt\y t|}Wntk r&dSX|jj}|jjtj|jt|=tj d||SQRXdS)NzRemoved log handler %s.) rrKeyErrorrgetvaluecloser removeHandlerrr")r#r$Zcontentrrr log_capture_finish8s    r*cCs|tdkrtjdatjj}|jd}|dkr6d}tS|jdrp|jdd\}}tj |}|j |j d|Sdsxt dS) NZtunedr __main__ztuned..ZNOTSETF) r rZ getLoggerinspectZ currentframef_backf_locals startswithsplitZgetChildremove_all_handlersrAssertionError)Zcalling_modulenamerootZchildZ child_loggerrrr rEs      csxeZdZdZejdZdZdZfddZ ddZ dd Z e j e je jfd d Zd d ZeddZeddZZS) TunedLoggerz!Custom TuneD daemon logger class.z1%(asctime)s %(levelname)-8s %(name)s: %(message)sNcs*tt|j|||jtj|jdS)N)superr7r rrINFOswitch_to_console)rargskwargs) __class__rr r ^s zTunedLogger.__init__cOs|jtj|f||dS)N)logconstsLOG_LEVEL_CONSOLE)rmsgr;r<rrr consolecszTunedLogger.consolecCs |j|j|j|jdS)N)_setup_console_handlerr3r!_console_handler)rrrr r:fszTunedLogger.switch_to_consolecCs&|j||||j|j|jdS)N)_setup_file_handlerr3r! _file_handler)rfilenamemaxBytes backupCountrrr switch_to_filekszTunedLogger.switch_to_filecCs"|j}x|D]}|j|q WdS)N)handlersr))rZ _handlersrrrr r3rs zTunedLogger.remove_all_handlerscCs*|jdk rdStj|_|jj|jdS)N)rDrrr _formatter)clsrrr rCws  z"TunedLogger._setup_console_handlercCsj|jdk rdStjj|}|dkr&d}tjj|ss4  6