
    c$              	           d Z dZddlZddlZddlZddlmZ d Zd Z G d dej                        Z
dd	Zd
ZdZddZddZd ZeefdZddddeedddf	dZdddddddddZy)z5Extends the logging module from the standard library.zrestructuredtext en    N)colorize_ansic           	      N    || _         dD ]  }t        | |t        ||              y)z6bind standard logger's methods as methods on the class)debuginfowarningerrorcritical	exceptionN)__loggersetattrgetattr)clsloggerattrs      </usr/lib/python3/dist-packages/logilab/common/logging_ext.pyset_log_methodsr      s+    CLN 2T764012    c                 "    d| j                   v ryy )NXXXcyanmessagerecords    r   xxx_cyanr   $   s     r   c                       e Zd ZdZddZd Zy)ColorFormatterai  
    A color Formatter for the logging standard module.

    By default, colorize CRITICAL and ERROR in red, WARNING in orange, INFO in
    green and DEBUG in yellow.

    self.colors is customizable via the 'color' constructor argument (dictionary).

    self.colorfilters is a list of functions that get the LogRecord
    and return a color name or None.
    Nc                     t         j                  j                  | ||       g | _        dddddd| _        |.t        |t              sJ | j                  j                  |       y y )Nredmagentagreenyellow)CRITICALERRORWARNINGINFODEBUG)logging	Formatter__init__colorfilterscolors
isinstancedictupdate)selffmtdatefmtr,   s       r   r*   zColorFormatter.__init__6   si    ""4g6 
 fd+++KKv& r   c                    t         j                  j                  | |      }|j                  | j                  v r%| j                  |j                     }t        ||      S | j                  D ]  } ||      }|st        ||      c S  |S N)r(   r)   format	levelnamer,   r   r+   )r0   r   msgcolorcfs        r   r5   zColorFormatter.formatD   s    &&tV4t{{*KK 0 01E e,,'' 56
(e445 
r   )NNN)__name__
__module____qualname____doc__r*   r5    r   r   r   r   )   s    
'
r   r   c                 H   | 4t        j                         } | j                  st        j                          | j                  d   j                  j
                  }t        |fi |}|j                  j                  t               | j                  d   j                  |       y)z
    Install a color formatter on the 'logger'. If not given, it will
    defaults to the default logger.

    Any additional keyword will be passed as-is to the ColorFormatter
    constructor.
    Nr   )r(   	getLoggerhandlersbasicConfig	formatter_fmtr   r+   appendr   setFormatter)r   kw
format_msgr1   s       r   set_color_formatterrI   Q   s~     ~""$!#--22J

*r
*CH%
OOA##C(r   z3%(asctime)s - (%(name)s) %(levelname)s: %(message)sz%Y-%m-%d %H:%M:%SFc                 (   t         j                  j                  d      r#t        j                  t
        j                        }| rt        j                         }|S |0|rddlm} |j                         }|S t        j                         }|S 	 |Nt         j                  dk(  r#t
        j                  dk\  rddlm}  ||      }|S t        j                  |      }	 |S ddlm}  ||fi |}	 |S # t        $ r t        j                         }Y |S w xY w)z7get an apropriate handler according to given parametersAPYCOT_ROOTr   )rA   posix)      )WatchedFileHandler)TimedRotatingFileHandler)osenvirongetr(   StreamHandlersysstdoutrA   SysLogHandlernameversion_infologging.handlersrO   FileHandlerrP   OSError)r   sysloglogfilerotation_parametershandlerrA   rO   rP   s           r   get_handlerra   g   s	   	zz~~m$''

3''). N- 
(,,.G$ N! ++-G  N	."*77g%#*:*:f*DC09G N &11':G N F27R>QR N  	.++-GN	.s   6C0 C0 C0 0DDc                     |&| rt         j                  }|S t         j                  }|S t        |t              r$t        t         t        j                  ||            }|S r4   )r(   r'   r$   r-   strr   THRESHOLD_MAPrS   )r   logthresholds     r   get_thresholdrf      sZ    "==L
  #==L  
L#	&w(9(9,(UVr   c                      t        t        j                  d      xr t        j                  j                         } | syt        j
                  dk(  r	 ddlm}  |        y# t        $ r Y yw xY w)NisattyFntr   )initT)	hasattrrU   
__stdout__rh   rQ   rX   coloramarj   ImportError)rh   init_win32_colorss     r   _colorable_terminalrp      s\    S^^X.J3>>3H3H3JF	ww$	: 	  		s   A   	A,+A,c                     t               r,t        | |      }d }|j                  j                  |       |S t	        j
                  | |      }|S )Nc                 @    d| j                   v ryd| j                   v ryy )Nr   r   kickr   r   r   s    r   col_factzget_formatter.<locals>.col_fact   s%    &' (r   )rp   r   r+   rE   r(   r)   )	logformatlogdateformatr1   rt   s       r   get_formatterrw      sO    Y6	 	) J 	=9Jr   c	                 
   t        j                         }	|t        | |||      }|g|	_        t	        | |      }|	j                  |       |&| rt        ||      }nt        j                  ||      }|j                  |       |S )zinit the log service)ru   rv   )	r(   r@   ra   rA   rf   setLevelrw   r)   rF   )
r   r]   re   r^   ru   rv   r1   r_   r`   r   s
             r   init_logrz      s      FeVW6IJ iFO 5L
OOL!
{)=QC##I}=CNr   r'   r&   r%   r$   r#   )	LOG_DEBUGLOG_INFO
LOG_NOTICELOG_WARNLOG_WARNINGLOG_ERR	LOG_ERRORLOG_CRITr4   )FFNN)FN)r=   __docformat__rQ   rU   r(   logilab.common.textutilsr   r   r   r)   r   rI   
LOG_FORMATLOG_DATE_FORMATra   rf   rp   rw   rz   rd   r>   r   r   <module>r      s   $ <% 	 
  22
%W&& %P)$ C
%>
 'o " !> 	r   