???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
<e              
   @   s   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jZd dlZd dl	Z	d dl
Z
yd dlmZ W n   d dlmZ Y nX dgZdai Ze
j ZG dd deZdd Zdd	 Zd
d Zdd ZG dd dej Zejejej eje e jej dS )    N)StringIOgetc               @   s   e Zd Zdd ZdS )
LogHandlerc             C   s   || _ || _d S )N)handlerstream)selfr   r    r   /usr/lib/python3.6/logs.py__init__   s    zLogHandler.__init__N)__name__
__module____qualname__r
   r   r   r   r	   r      s   r   c             C   s<   t j }tjtj }d}xt| D ]}||j|7 }q"W |S )N )randomZSystemRandomstringZascii_lettersZdigitsrangeZchoice)Zlengthrcharsresir   r   r	   _random_string   s    r   c          
   C   s   t  x&tdD ]}td}|tkrP qW d S t }tj|}|j|  tjd}|j	| t
j| t||}|t|< t
jd|  |S Q R X d S )N
      z%%(levelname)-8s %(name)s: %(message)szAdded log handler %s.)log_handlers_lockr   r   log_handlersr   loggingStreamHandlersetLevel	FormattersetFormatterroot_logger
addHandlerr   debug)Z	log_levelr   tokenr   r   Z	formatterlog_handlerr   r   r	   log_capture_start$   s"    




r%   c             C   sj   t \ yt|  }W n tk
r&   d S X |jj }|jj  tj|j t| = tj	d|   |S Q R X d S )NzRemoved log handler %s.)
r   r   KeyErrorr   getvaluecloser    removeHandlerr   r"   )r#   r$   Zcontentr   r   r	   log_capture_finish8   s    

r*   c              C   s|   t d krtjda tj j} | jd }|dkr6d}t S |jdrp|jdd\}}t j	|}|j
  |jd |S dsxtd S )	NZtunedr   __main__ztuned..   ZNOTSETF)r    r   Z	getLoggerinspectZcurrentframef_backf_locals
startswithsplitZgetChildremove_all_handlersr   AssertionError)Zcalling_modulenamerootZchildZchild_loggerr   r   r	   r   E   s    





c                   sx   e Zd ZdZejdZdZdZ fddZ	dd Z
dd	 Zejejejfd
dZdd Zedd Zedd Z  ZS )TunedLoggerz!Custom TuneD daemon logger class.z1%(asctime)s %(levelname)-8s %(name)s: %(message)sNc                s*   t t| j|| | jtj | j  d S )N)superr7   r
   r   r   INFOswitch_to_console)r   argskwargs)	__class__r   r	   r
   ^   s    zTunedLogger.__init__c             O   s   | j tj|f|| d S )N)logconstsLOG_LEVEL_CONSOLE)r   msgr;   r<   r   r   r	   consolec   s    zTunedLogger.consolec             C   s    | j   | j  | j| j d S )N)_setup_console_handlerr3   r!   _console_handler)r   r   r   r	   r:   f   s    zTunedLogger.switch_to_consolec             C   s&   | j ||| | j  | j| j d S )N)_setup_file_handlerr3   r!   _file_handler)r   filenamemaxBytesbackupCountr   r   r	   switch_to_filek   s    zTunedLogger.switch_to_filec             C   s"   | j }x|D ]}| j| qW d S )N)handlersr)   )r   Z	_handlersr   r   r   r	   r3   r   s    
zTunedLogger.remove_all_handlersc             C   s*   | j d k	rd S tj | _ | j j| j d S )N)rD   r   r   r   
_formatter)clsr   r   r	   rC   w   s    

z"TunedLogger._setup_console_handlerc             C   sj   | j d k	rd S tjj|}|dkr&d}tjj|s<tj| tjj|t	|t	|d| _ | j j
| j d S )Nr   r,   )rH   rI   )rF   ospathdirnameexistsmakedirsr   rK   ZRotatingFileHandlerintr   rL   )rM   rG   rH   rI   Zlog_directoryr   r   r	   rE      s    

zTunedLogger._setup_file_handler)r   r   r   __doc__r   r   rL   rD   rF   r
   rB   r:   r?   ZLOG_FILEZLOG_FILE_MAXBYTESZLOG_FILE_COUNTrJ   r3   classmethodrC   rE   __classcell__r   r   )r=   r	   r7   X   s   
r7   ) atexitr   Zlogging.handlersrN   Zos.pathr.   Ztuned.constsr?   r   r   Z	threadingr   io__all__r    r   ZLockr   objectr   r   r%   r*   r   ZgetLoggerClassr7   ZaddLevelNamer@   ZLOG_LEVEL_CONSOLE_NAMEZsetLoggerClassregisterZshutdownr   r   r   r	   <module>   s4   
6
