<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
Yj>y                 @   s   d dddgZ 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ZddlZddl	Z
ddl
Z
G dd  d eZG dd deZG d	d
 d
eZG dd deZG dd deZG dd deZe ZdS )	LogTargetFileLogLoggerlog    Nc               @   s2   e Zd ZdZdd ZdddZdd Zd	d
 ZdS )r   z% Abstract class for logging targets. c             C   s
   d | _ d S )N)fd)self r   /usr/lib/python3.6/logger.py__init__(   s    zLogTarget.__init__r   c             C   s   t dd S )Nz%LogTarget.write is an abstract method)NotImplementedError)r   datalevelloggeris_debugr   r   r	   write+   s    zLogTarget.writec             C   s   t dd S )Nz%LogTarget.flush is an abstract method)r   )r   r   r   r	   flush.   s    zLogTarget.flushc             C   s   t dd S )Nz%LogTarget.close is an abstract method)r   )r   r   r   r	   close1   s    zLogTarget.closeN)r   )__name__
__module____qualname____doc__r
   r   r   r   r   r   r   r	   r   &   s
   
c               @   s.   e Zd Zdd ZdddZdd Zdd	 Zd
S )
_StdoutLogc             C   s   t j|  tj| _d S )N)r   r
   sysstdoutr   )r   r   r   r	   r
   8   s    
z_StdoutLog.__init__r   c             C   s   | j j| | j  d S )N)r   r   r   )r   r   r   r   r   r   r   r	   r   <   s    z_StdoutLog.writec             C   s   | j   d S )N)r   )r   r   r   r	   r   A   s    z_StdoutLog.closec             C   s   | j j  d S )N)r   r   )r   r   r   r	   r   D   s    z_StdoutLog.flushN)r   )r   r   r   r
   r   r   r   r   r   r   r	   r   7   s   
r   c               @   s   e Zd Zdd ZdS )
_StderrLogc             C   s   t j|  tj| _d S )N)r   r
   r   stderrr   )r   r   r   r	   r
   K   s    
z_StderrLog.__init__N)r   r   r   r
   r   r   r   r	   r   J   s   r   c               @   s.   e Zd Zdd ZdddZdd Zdd	 Zd
S )
_SyslogLogc             C   s.   t j|  tjtjjtjd tj	tj
 d S )Nr   )r   r
   syslogZopenlogospathbasenamer   argvZLOG_PIDZ
LOG_DAEMON)r   r   r   r	   r
   S   s    
	z_SyslogLog.__init__r   c             C   s   d }|rt j}nF||jkr"t j}n4||jkr4t j}n"||jkrFt j}n||jkrVt j	}|j
drt|d t|d  }t|dkr|d krt j | nt j || d S )N
   r   )r   Z	LOG_DEBUGINFO1ZLOG_INFOWARNINGZLOG_WARNINGERRORZLOG_ERRFATALZLOG_CRITendswithlen)r   r   r   r   r   Zpriorityr   r   r	   r   a   s"    




z_SyslogLog.writec             C   s   t j  d S )N)r   Zcloselog)r   r   r   r	   r   w   s    z_SyslogLog.closec             C   s   d S )Nr   )r   r   r   r	   r   z   s    z_SyslogLog.flushN)r   )r   r   r   r
   r   r   r   r   r   r   r	   r   R   s   
r   c               @   s<   e Zd ZdZdddZdd Zddd	Zd
d Zdd ZdS )r   z< FileLog class.
    File will be opened on the first write. wc             C   s   t j|  || _|| _d S )N)r   r
   filenamemode)r   r+   r,   r   r   r	   r
      s    
zFileLog.__init__c             C   sv   | j r
d S tjtjB }| jjdr,|tjO }tj| j|d| _ tj	| j d tj
| j | j| _ tj| j tjtj d S )Nai  )r   r   O_CREATO_WRONLYr,   
startswithO_APPENDopenr+   fchmodfdopenfcntlZF_SETFDZ
FD_CLOEXEC)r   flagsr   r   r	   r2      s    
zFileLog.openr   c             C   s(   | j s| j  | j j| | j j  d S )N)r   r2   r   r   )r   r   r   r   r   r   r   r	   r      s    zFileLog.writec             C   s   | j s
d S | j j  d | _ d S )N)r   r   )r   r   r   r	   r      s    
zFileLog.closec             C   s   | j s
d S | j j  d S )N)r   r   )r   r   r   r	   r      s    zFileLog.flushN)r*   )r   )	r   r   r   r   r
   r2   r   r   r   r   r   r   r	   r      s   

c               @   s  e Zd ZdZd[Zd\Zd]Zd^Zd_ZdZ	e
 Ze Ze Zd`d	d
Zdd ZdaddZdbddZdcddZddddZdd Zdd Zdd Zdd Zdd Zd d! Zed"fd#d$Zed"fd%d&Zed"fd'd(Zed"fd)d*Zed"fd+d,Z ed"fd-d.Z!d/d0 Z"d1d2 Z#d3d4 Z$d5d6 Z%d7d8 Z&d9d: Z'd;d< Z(d=d> Z)d?d@ Z*dAdB Z+dCdD Z,dedEdFZ-dGdH Z.dfdIdJZ/ed"dfdKdLZ0ed"dfdMdNZ1ed"dfdOdPZ2dgdQdRZ3dSdT Z4dUdV Z5dWdX Z6dhdYdZZ7d"S )ir   aL	  
    Format string:

    %(class)s      Calling class the function belongs to, else empty
    %(date)s       Date using Logger.date_format, see time module
    %(domain)s     Full Domain: %(module)s.%(class)s.%(function)s
    %(file)s       Filename of the module
    %(function)s   Function name, empty in __main__
    %(label)s      Label according to log function call from Logger.label
    %(level)d      Internal logging level
    %(line)d       Line number in module
    %(module)s     Module name
    %(message)s    Log message

    Standard levels:

    FATAL                 Fatal error messages
    ERROR                 Error messages
    WARNING               Warning messages
    INFOx, x in [1..5]    Information
    DEBUGy, y in [1..10]  Debug messages
    NO_INFO               No info output
    NO_DEBUG              No debug output
    INFO_MAX              Maximum info level
    DEBUG_MAX             Maximum debug level

    x and y depend on info_max and debug_max from Logger class
    initialization. See __init__ function.

    Default logging targets:

    stdout        Logs to stdout
    stderr        Logs to stderr
    syslog        Logs to syslog

    Additional arguments for logging functions (fatal, error, warning, info
    and debug):

    nl       Disable newline at the end with nl=0, default is nl=1.
    fmt      Format string for this logging entry, overloads global format
             string. Example: fmt="%(file)s:%(line)d %(message)s"
    nofmt    Only output message with nofmt=1. The nofmt argument wins over
             the fmt argument.

    Example:

    from logger import log
    log.setInfoLogLevel(log.INFO1)
    log.setDebugLogLevel(log.DEBUG1)
    for i in range(1, log.INFO_MAX+1):
        log.setInfoLogLabel(i, "INFO%d: " % i)
    log.setFormat("%(date)s %(module)s:%(line)d [%(domain)s] %(label)s: "
                  "%(level)d %(message)s")
    log.setDateFormat("%Y-%m-%d %H:%M:%S")

    fl = FileLog("/tmp/log", "a")
    log.addInfoLogging("*", fl)
    log.addDebugLogging("*", fl)
    log.addInfoLogging("*", log.syslog, fmt="%(label)s%(message)s")

    log.debug3("debug3")
    log.debug2("debug2")
    log.debug1("debug1")
    log.info2("info2")
    log.info1("info1")
    log.warning("warning\n", nl=0)
    log.error("error\n", nl=0)
    log.fatal("fatal")
    log.info(log.INFO1, "nofmt info", nofmt=1)

                r#   r   
   c             C   s  i | _ i | _d| _d| _i | _i | _i | _i | _i | _i | _	|dk rPt
d| |dk rdt
d| | j| _|| _d| _|| _| j| jd | j| jd | j| jd | j| jd xNtd| jd D ]:}t| d	| | | j|d t| d
| dd | | qW xTtd| jd D ]@}t| d| | | j|d|  t| d| dd | | qW | j| j | j| j | jd | jd | jd| j| j| j| jg | jd| jdd t| j| jd D  | jd| jdd td| jd D  dS )z Logger class initialization  r#   zLogger: info_max %d is too lowr   zLogger: debug_max %d is too lowzFATAL ERROR: zERROR: z	WARNING: zINFO%dzinfo%dc                s    fddS )Nc                s    j | f||S )N)info)messageargskwargs)r   xr   r	   <lambda>   s    z3Logger.__init__.<locals>.<lambda>.<locals>.<lambda>r   )r   rA   r   )r   rA   r	   rB     s    z!Logger.__init__.<locals>.<lambda>zDEBUG%dz	DEBUG%d: zdebug%dc                s    fddS )Nc                s    j | f||S )N)debug)r>   r?   r@   )r   rA   r   r	   rB   )  s    z3Logger.__init__.<locals>.<lambda>.<locals>.<lambda>r   )r   rA   r   )r   rA   r	   rB   (  s    z%(label)s%(message)sz%d %b %Y %H:%M:%S*c             S   s   g | ]}|qS r   r   ).0ir   r   r	   
<listcomp>4  s    z#Logger.__init__.<locals>.<listcomp>c             S   s   g | ]}|qS r   r   )rE   rF   r   r   r	   rG   6  s    N) _level_debug_level_format_date_format_label_debug_label_logging_debug_logging_domains_debug_domains
ValueErrorr%   NO_INFOINFO_MAXNO_DEBUG	DEBUG_MAXsetInfoLogLabelr'   	TRACEBACKr&   rangesetattrsetDebugLogLabelsetInfoLogLevelr$   setDebugLogLevel	setFormatsetDateFormatsetInfoLoggingr   r   setDebugLogging)r   Zinfo_maxZ	debug_maxrH   r   r   r	   r
      sX    






zLogger.__init__c             C   sN   xHt | j| jd D ]2}|| jkr$qx | j| D ]\}}}|j  q0W qW dS )z Close all logging targets r#   N)rY   r'   rV   rN   r   )r   r   dummytargetr   r   r	   r   8  s
    
zLogger.closerD   c             C   s$   | j | || jkr| j| S | jS )z Get info log level. )_checkDomainrH   NOTHING)r   domainr   r   r	   getInfoLogLevel@  s    


zLogger.getInfoLogLevelc             C   s8   | j | || jk r| j}|| jkr*| j}|| j|< dS )z% Set log level [NOTHING .. INFO_MAX] N)rd   re   rT   rH   )r   r   rf   r   r   r	   r\   G  s    


zLogger.setInfoLogLevelc             C   s*   | j | || jkr$| j| | j S | jS )z Get debug log level. )rd   rI   rU   )r   rf   r   r   r	   getDebugLogLevelP  s    

zLogger.getDebugLogLevelc             C   s:   | j | |dk rd}|| jkr&| j}|| j | j|< dS )z- Set debug log level [NO_DEBUG .. DEBUG_MAX] r   N)rd   rV   rU   rI   )r   r   rf   r   r   r	   r]   W  s    

zLogger.setDebugLogLevelc             C   s   | j S )N)rJ   )r   r   r   r	   	getFormat`  s    zLogger.getFormatc             C   s
   || _ d S )N)rJ   )r   rJ   r   r   r	   r^   c  s    zLogger.setFormatc             C   s   | j S )N)rK   )r   r   r   r	   getDateFormatf  s    zLogger.getDateFormatc             C   s
   || _ d S )N)rK   )r   rJ   r   r   r	   r_   i  s    zLogger.setDateFormatc             C   s:   | j |}x*|D ]"}| j|| j| jd || j|< qW dS )zU Set log label for level. Level can be a single level or an array
        of levels. )	min_level	max_levelN)
_getLevels_checkLogLevelr'   rT   rL   )r   r   labellevelsr   r   r	   rW   l  s
    



zLogger.setInfoLogLabelc             C   s>   | j |dd}x*|D ]"}| j|| j| jd || j|< qW dS )zU Set log label for level. Level can be a single level or an array
        of levels. r#   )r   )rk   rl   N)rm   rn   r$   rV   rM   )r   r   ro   rp   r   r   r	   r[   u  s
    


zLogger.setDebugLogLabelNc             C   s   | j ||||dd dS )z Set info log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r   )r   N)_setLogging)r   rf   rc   r   fmtr   r   r	   r`   ~  s    zLogger.setInfoLoggingc             C   s   | j ||||dd dS )z Set debug log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r#   )r   N)rq   )r   rf   rc   r   rr   r   r   r	   ra     s    zLogger.setDebugLoggingc             C   s   | j ||||dd dS )z Add info log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r   )r   N)_addLogging)r   rf   rc   r   rr   r   r   r	   addInfoLogging  s    zLogger.addInfoLoggingc             C   s   | j ||||dd dS )z Add debg log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r#   )r   N)rs   )r   rf   rc   r   rr   r   r   r	   addDebugLogging  s    zLogger.addDebugLoggingc             C   s   | j ||||dd dS )z Delete info log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r   )r   N)_delLogging)r   rf   rc   r   rr   r   r   r	   delInfoLogging  s    zLogger.delInfoLoggingc             C   s   | j ||||dd dS )z Delete debug log target for domain and level. Level can be a single
        level or an array of levels. Use level ALL to set for all levels.
        If no format is specified, the default format will be used. r#   )r   N)rv   )r   rf   rc   r   rr   r   r   r	   delDebugLogging  s    zLogger.delDebugLoggingc             C   s   | j |ddS )zN Is there currently any info logging for this log level (and
        domain)? r   )r   )_isLoggingHere)r   r   r   r   r	   isInfoLoggingHere  s    zLogger.isInfoLoggingHerec             C   s   | j |ddS )zO Is there currently any debug logging for this log level (and
        domain)? r#   )r   )ry   )r   r   r   r   r	   isDebugLoggingHere  s    zLogger.isDebugLoggingHerec             O   s,   | j | d|d< | j| j|f|| dS )z Fatal error log. r   r   N)_checkKWargs_logr'   )r   rJ   r?   r@   r   r   r	   fatal  s    
zLogger.fatalc             O   s,   | j | d|d< | j| j|f|| dS )z Error log. r   r   N)r|   r}   r&   )r   rJ   r?   r@   r   r   r	   error  s    
zLogger.errorc             O   s,   | j | d|d< | j| j|f|| dS )z Warning log. r   r   N)r|   r}   r%   )r   rJ   r?   r@   r   r   r	   warning  s    
zLogger.warningc             O   sB   | j |d| jd | j| d|d< | j|| j |f|| dS )z Information log using info level [1..info_max].
        There are additional infox functions according to info_max from
        __init__r#   )rk   rl   r   r   N)rn   rT   r|   r}   rS   )r   r   rJ   r?   r@   r   r   r	   r=     s    
zLogger.infoc             O   s<   | j |d| jd | j| d|d< | j||f|| dS )z Debug log using debug level [1..debug_max].
        There are additional debugx functions according to debug_max
        from __init__r#   )rk   rl   r   N)rn   rV   r|   r}   )r   r   rJ   r?   r@   r   r   r	   rC     s    
zLogger.debugc             C   s   | j | jtj g i d d S )N)r?   r@   )r}   rX   	traceback
format_exc)r   r   r   r	   	exception  s    zLogger.exceptionc             C   s&   ||k s||kr"t d|||f d S )Nz*Level %d out of range, should be [%d..%d].)rR   )r   r   rk   rl   r   r   r	   rn     s    zLogger._checkLogLevelc             C   s2   |sd S x$|j  D ]}|dkrtd| qW d S )Nnlrr   nofmtz0Key '%s' is not allowed as argument for logging.)r   rr   r   )keysrR   )r   r@   keyr   r   r	   r|     s
    zLogger._checkKWargsc             C   s   | s|dkrt d| d S )Nr<   zDomain '%s' is not valid.)rR   )r   rf   r   r   r	   rd     s    zLogger._checkDomainc             C   s   || j krft|tst|tr$|}n|g}xp|D ]0}|rL| j|d| jd q0| j|| j| jd q0W n6|rdd t| j	| jD }ndd t| j| jD }|S )z Generate log level array. r#   )rk   rl   c             S   s   g | ]}|qS r   r   )rE   rF   r   r   r	   rG     s    z%Logger._getLevels.<locals>.<listcomp>c             S   s   g | ]}|qS r   r   )rE   rF   r   r   r	   rG     s    )
ALL
isinstancelisttuplern   rV   r'   rT   rY   ZDEBUG1)r   r   r   rp   r   r   r	   rm     s    


zLogger._getLevelsc             C   sN   t |tst |tr|}n|g}x(|D ] }t|jts&td|jj q&W |S )z Generate target array. z '%s' is no valid logging target.)r   r   r   
issubclass	__class__r   rR   r   )r   rc   targetsZ_targetr   r   r	   _getTargets  s    
zLogger._getTargetsc             C   s   |r | j }| j}d| jd f}n| j}| j}| j| jd f}t|dkrP|j  xVt	|d |d D ]@}||krrqdx0|| D ]$\}}}||kr||j
|g j| q|W qdW dS )z% Generate dict with domain by level. r#   r   N)rQ   rO   rV   rP   rN   r'   rT   r)   clearrY   
setdefaultappend)r   r   rP   rN   Z_ranger   rf   rb   r   r   r	   _genDomains  s    zLogger._genDomainsc       	      C   sl   | j | | j||}| j|}|r,| j}n| j}x*|D ]"}x|D ]}|||fg||< qBW q8W | j| d S )N)rd   rm   r   rO   rN   r   )	r   rf   rc   r   rr   r   rp   r   rN   r   r   r	   rq     s    



zLogger._setLoggingc       	      C   st   | j | | j||}| j|}|r,| j}n| j}x2|D ]*}x$|D ]}|j|g j|||f qBW q8W | j| d S )N)rd   rm   r   rO   rN   r   r   r   )	r   rf   rc   r   rr   r   rp   r   rN   r   r   r	   rs   -  s    



 zLogger._addLoggingc       
      C   s   | j | | j||}| j|}|r,| j}n| j}x|D ]|}	xv|D ]n}|	|krPqB|||f||	 kr||	 j|||f t||	 dkr||	= qB|| jkrBtd|	||j	j
|f qBW q8W | j| d S )Nr   zDNo mathing logging for level %d, domain %s, target %s and format %s.)rd   rm   r   rO   rN   remover)   r   rR   r   r   r   )
r   rf   rc   r   rr   r   rp   r   rN   rH   r   r   r	   rv   <  s&    




zLogger._delLoggingc             C   st   | j ||}|sdS |d d }|r,| j}n| j}x<|| D ]0\}}}|dksh|j|shtj|d |r<dS q<W dS )NFrf   .rD   T)_genDictrO   rN   r0   fnmatchfnmatchcase)r   r   r   _dictpoint_domainrN   rf   rb   r   r   r	   ry   U  s    
zLogger._isLoggingHerec       	      C   s   |j jdkrD|j jd }||jkrD|j| }| j|j|j }|rD|S tj|j }|j }|j|j	krt
|j	|j dr|j	|j j|krdS xT|j	j D ]F\}}t|tjrt
||jrt||j}t|tjr|j|kr|S qW dS )z7 Function to get calling class. Returns class or None. r   Z	func_codeN)f_codeco_argcountco_varnamesf_locals
_getClass2r   inspectZ	getmoduleco_name__dict__hasattr__code__itemsr   typesZ	ClassTypegetattrFunctionType)	r   frameZselfname_selfobjmodulecoderb   valuer   r   r	   	_getClassi  s*    


zLogger._getClassc             C   sV   x,|j j D ]}t|tjr|j|kr|S qW x"|jD ]}| j||}|r6|S q6W dS )z@ Internal function to get calling class. Returns class or None. N)r   valuesr   r   r   r   	__bases__r   )r   r   r   r   baseZ_objr   r   r	   r     s    
zLogger._getClass2c             O   sl  d}d|kr|d }d}d|kr(|d }d}d|kr<|d }| j ||}|sPd S t|dkrj|| |d< n&t|dkr||d  |d< n||d< |d d }	|r| j}
n| j}
g }x|
| D ]\}}}||krq|d	ks|	j|d stj|d |r|s| j}d
|kr|d
 }|r0|j|d || | n|j|| || | |rZ|jd|| | |j	| qW d S )Nr   r   r#   r   r   r>   rf   r   rD   rr   r"   )
r   r)   rO   rN   r0   r   r   rJ   r   r   )r   r   rJ   r?   r@   r   r   r   r   r   rN   Zused_targetsrf   rc   r   r   r	   r}     sL    
zLogger._logc             C   s  g }d}|r | j }| j}| j}n| j}| j}| j}xN|D ]F}|dkrh|| |kr~d}t|dkrdg }P q8|| |kr8|j| q8W | rt|dk rdS ||krdS tj	 }	x$|	r|	j
r|	jd | jkr|	j
}	qW |	std|	jd }
|
d	 }x|D ]}|j|rg }P qW |	j}t|
}xx|| D ]l}|jd}|dkrDq&n|dkr\|d| }n|}|t|kr|
j|sdS n|j|
s&dS q&W d
}||kr|| }|j|	j|
d
|jd
||tj| jtj d	}|d dkrd
|d< d}x&|| D ]}|dkrqd}P qW | jjddksR| jjddksR|sRt|dkrl| j|	}|rl|j|d< d
|d  |d< |d d
kr|d  d	|d  7  < |d d
kr|d  d	|d  7  < t|dk r|S |d d	 }x0|D ](}|j|stj|d |r|S qW dS )z Internal function. FrD   Tr   r#   Nr   z Frame information not available.r   r<   )	fileliner   classfunctionrf   ro   r   Zdater   ?z	%(domain)z%(class)r   r   rf   )rI   rQ   rM   rH   rP   rL   r)   r   r   Zcurrentframef_back	f_globalsr   rR   r0   r   findco_filenamef_linenor   timeZstrftimerK   Z	localtimerJ   r   r   r   r   )r   r   r   Zcheck_domainsZsimple_matchr   rP   rL   rf   fZmodule_nameZpoint_moduleco_lenrF   dZ	level_strZdomain_neededr   r   r   r   r	   r     s    














zLogger._genDict)r7   r;   )rD   )rD   )rD   )rD   )r   )r   )r   )r   )8r   r   r   r   r   re   r'   rX   r&   r%   r   r   r   r   r   r   r
   r   rg   r\   rh   r]   ri   r^   rj   r_   rW   r[   r`   ra   rt   ru   rw   rx   rz   r{   r~   r   r   r=   rC   r   rn   r|   rd   rm   r   r   rq   rs   rv   ry   r   r   r}   r   r   r   r   r	   r      sd   G
;

	

					


 4)__all__r   r   r   r   r   r   r   r5   Zos.pathr   objectr   r   r   r   r   r   r   r   r   r   r	   <module>   s.   -(     *4