o
    _                     @   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mZ d dlZd dl	Z	d dl
Z
zd dlmZ W n
   d dlmZ Y dgZdai Ze
 ZG dd deZdd Zdd	 Zd
d Zdd ZG dd de Zeejej ee e 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/dist-packages/tuned/logs.py__init__   s   
zLogHandler.__init__N)__name__
__module____qualname__r   r	   r	   r	   r
   r      s    r   c                 C   s8   t  }tjtj }d}t| D ]	}|||7 }q|S )N )randomSystemRandomstringascii_lettersdigitsrangechoice)lengthrcharsresir	   r	   r
   _random_string   s   r   c                 C   s   t P tdD ]}td}|tvr n
q	 W d    d S t }t|}||  td}|	| t
| t||}|t|< t
d|  |W  d    S 1 sUw   Y  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)	log_levelr   tokenr   r   	formatterlog_handlerr	   r	   r
   log_capture_start$   s*   




$r-   c              	   C   s   t ; zt|  }W n ty   Y W d    d S w |j }|j  t|j t| = t	d|   |W  d    S 1 s@w   Y  d S )NzRemoved log handler %s.)
r   r    KeyErrorr   getvaluecloser&   removeHandlerr   r(   )r*   r,   contentr	   r	   r
   log_capture_finish8   s   

$r3   c                  C   st   t d u r	tda t j} | jd }|dkrd}t S |dr8|dd\}}t 	|}|
  |d |S J )Ntunedr   __main__ztuned..   NOTSET)r&   r!   	getLoggerinspectcurrentframef_backf_locals
startswithsplitgetChildremove_all_handlersr#   )calling_modulenamerootchildchild_loggerr	   r	   r
   r   E   s   





c                       sx   e Zd ZdZe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|i | | tj |   d S r   )superrG   r   r#   r!   INFOswitch_to_console)r   argskwargs	__class__r	   r
   r   ^   s   zTunedLogger.__init__c                 O   s    | j tj|g|R i | d S r   )logconstsLOG_LEVEL_CONSOLE)r   msgrK   rL   r	   r	   r
   consolec   s    zTunedLogger.consolec                 C   s    |    |   | | j d S r   )_setup_console_handlerrA   r'   _console_handler)r   r	   r	   r
   rJ   f   s   zTunedLogger.switch_to_consolec                 C   s&   |  ||| |   | | j d S r   )_setup_file_handlerrA   r'   _file_handler)r   filenamemaxBytesbackupCountr	   r	   r
   switch_to_filek   s   zTunedLogger.switch_to_filec                 C   s   | j }|D ]}| | qd S r   )handlersr1   )r   	_handlersr   r	   r	   r
   rA   r   s   zTunedLogger.remove_all_handlersc                 C   s*   | j d urd S t | _ | j | j d S r   )rU   r!   r"   r%   
_formatter)clsr	   r	   r
   rT   w   s   

z"TunedLogger._setup_console_handlerc                 C   sj   | j d urd S tj|}|dkrd}tj|st| tjj|t	|t	|d| _ | j 
| j d S )Nr   r6   )rY   rZ   )rW   ospathdirnameexistsmakedirsr!   r\   RotatingFileHandlerintr%   r^   )r_   rX   rY   rZ   log_directoryr	   r	   r
   rV      s   

zTunedLogger._setup_file_handler)r   r   r   __doc__r!   r$   r^   rU   rW   r   rS   rJ   rP   LOG_FILELOG_FILE_MAXBYTESLOG_FILE_COUNTr[   rA   classmethodrT   rV   __classcell__r	   r	   rM   r
   rG   X   s"    


rG   ) atexitr!   logging.handlersr`   os.pathr:   tuned.constsrP   r   r   	threadingr   io__all__r&   r    Lockr   objectr   r   r-   r3   r   getLoggerClassrG   addLevelNamerQ   LOG_LEVEL_CONSOLE_NAMEsetLoggerClassregistershutdownr	   r	   r	   r
   <module>   s6    6
