Current File : //lib/python3.9/site-packages/firewall/core/__pycache__/logger.cpython-39.pyc
a

���g?y�@s�gd�ZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z
ddl
Z
Gdd�de�ZGdd�de�Z
Gdd�de
�ZGd	d
�d
e�ZGdd�de�ZGd
d�de�Ze�ZdS))�	LogTarget�FileLog�Logger�log�Nc@s2eZdZdZdd�Zddd�Zdd�Zd	d
�ZdS)
rz% Abstract class for logging targets. cCs
d|_dS�N)�fd��self�r
�8/usr/lib/python3.9/site-packages/firewall/core/logger.py�__init__(szLogTarget.__init__rcCstd��dS)Nz%LogTarget.write is an abstract method��NotImplementedError�r	�data�level�logger�is_debugr
r
r�write+szLogTarget.writecCstd��dS)Nz%LogTarget.flush is an abstract methodr
rr
r
r�flush.szLogTarget.flushcCstd��dS)Nz%LogTarget.close is an abstract methodr
rr
r
r�close1szLogTarget.closeN)r)�__name__�
__module__�__qualname__�__doc__rrrrr
r
r
rr&s

rc@s.eZdZdd�Zddd�Zdd�Zdd	�Zd
S)�
_StdoutLogcCst�|�tj|_dSr)rr�sys�stdoutrrr
r
rr8s
z_StdoutLog.__init__rcCs|j�|�|��dSr)rrrrr
r
rr<sz_StdoutLog.writecCs|��dSr)rrr
r
rrAsz_StdoutLog.closecCs|j��dSr�rrrr
r
rrDsz_StdoutLog.flushN)r�rrrrrrrr
r
r
rr7s
rc@seZdZdd�ZdS)�
_StderrLogcCst�|�tj|_dSr)rrr�stderrrrr
r
rrKs
z_StderrLog.__init__N)rrrrr
r
r
rr Jsr c@s.eZdZdd�Zddd�Zdd�Zdd	�Zd
S)�
_SyslogLogcCs.t�|�t�tj�tjd�tj	tj
�dS)Nr)rr�syslogZopenlog�os�path�basenamer�argvZLOG_PIDZ
LOG_DAEMONrr
r
rrSs
	�z_SyslogLog.__init__rcCs�d}|rtj}nF||jkr"tj}n4||jkr4tj}n"||jkrFtj}n||jkrVtj	}|�
d�rt|dt|�d�}t|�dkr�|dur�t�|�nt�||�dS)N�
�r)r#Z	LOG_DEBUG�INFO1ZLOG_INFO�WARNINGZLOG_WARNING�ERRORZLOG_ERR�FATALZLOG_CRIT�endswith�len)r	rrrr�priorityr
r
rras"




z_SyslogLog.writecCst��dSr)r#Zcloselogrr
r
rrwsz_SyslogLog.closecCsdSrr
rr
r
rrzsz_SyslogLog.flushN)rrr
r
r
rr"Rs
r"c@s<eZdZdZddd�Zdd�Zddd	�Zd
d�Zdd
�ZdS)rz< FileLog class.
    File will be opened on the first write. �wcCst�|�||_||_dSr)rr�filename�mode)r	r2r3r
r
rr�s
zFileLog.__init__cCsv|jr
dStjtjB}|j�d�r,|tjO}t�|j|d�|_t�	|jd�t�
|j|j�|_t�|jtjtj
�dS)N�ai�)rr$�O_CREAT�O_WRONLYr3�
startswith�O_APPEND�openr2�fchmod�fdopen�fcntlZF_SETFDZ
FD_CLOEXEC)r	�flagsr
r
rr9�s
zFileLog.openrcCs(|js|��|j�|�|j��dSr)rr9rrrr
r
rr�sz
FileLog.writecCs|js
dS|j��d|_dSr)rrrr
r
rr�s
z
FileLog.closecCs|js
dS|j��dSrrrr
r
rr�sz
FileLog.flushN)r1)r)	rrrrrr9rrrr
r
r
rrs

rc@s�eZdZdZdZdZdZdZdZdZ	e
�Ze�Z
e�Zd\d
d�Zdd
�Zd]dd�Zd^dd�Zd_dd�Zd`dd�Zdd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zed#fd$d%�Zed#fd&d'�Zed#fd(d)�Zed#fd*d+�Zed#fd,d-�Z ed#fd.d/�Z!d0d1�Z"d2d3�Z#d4d5�Z$d6d7�Z%d8d9�Z&d:d;�Z'd<d=�Z(d>d?�Z)d@dA�Z*dBdC�Z+dDdE�Z,dadFdG�Z-dHdI�Z.dbdJdK�Z/ed#dfdLdM�Z0ed#dfdNdO�Z1ed#dfdPdQ�Z2dcdRdS�Z3dTdU�Z4dVdW�Z5dXdY�Z6dddZd[�Z7d#S)eraL	
    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��
c	Cs�i|_i|_d|_d|_i|_i|_i|_i|_i|_i|_	|dkrPt
d|��|dkrdt
d|��|j|_||_
d|_||_|�|jd�|�|jd�|�|jd�|�|jd�td|j
d�D]:}t|d	||�|�|d�t|d
|dd�||��q�td|jd�D]@}t|d
||�|�|d|�t|d|dd�||���q|�|j�|�|j�|�d�|�d�|�d|j|j|j|jg�|�d|jdd�t|j|j
d�D��|�d|jdd�td|jd�D��dS)z Logger class initialization �r)zLogger: info_max %d is too lowrzLogger: debug_max %d is too lowz
FATAL ERROR: zERROR: z	WARNING: zINFO%dzinfo%dcs��fdd�S)Ncs�j�|g|�Ri|��Sr)�info��message�args�kwargs�r	�xr
r�<lambda> s�3Logger.__init__.<locals>.<lambda>.<locals>.<lambda>r
rKr
rKrrMsz!Logger.__init__.<locals>.<lambda>zDEBUG%dz	DEBUG%d: zdebug%dcs��fdd�S)Ncs�j�|g|�Ri|��Sr)�debugrGrKr
rrM)srNr
rKr
rKrrM(sz%(label)s%(message)sz%d %b %Y %H:%M:%S�*cSsg|]}|�qSr
r
��.0�ir
r
r�
<listcomp>4�z#Logger.__init__.<locals>.<listcomp>cSsg|]}|�qSr
r
rQr
r
rrT6rUN) �_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	Zinfo_maxZ	debug_maxrVr
r
rr�sf
��
��

�
�
�zLogger.__init__cCsFt|j|jd�D].}||jvr"q|j|D]\}}}|��q,qdS)z Close all logging targets r)N)rgr-rdr\r)r	r�dummy�targetr
r
rr8s

zLogger.closerPcCs$|�|�||jvr|j|S|jS)z Get info log level. )�_checkDomainrV�NOTHING�r	�domainr
r
r�getInfoLogLevel@s


zLogger.getInfoLogLevelcCs8|�|�||jkr|j}||jkr*|j}||j|<dS)z% Set log level [NOTHING .. INFO_MAX] N)rrrsrbrV�r	rrur
r
rrjGs


zLogger.setInfoLogLevelcCs*|�|�||jvr$|j||jS|jS)z Get debug log level. )rrrWrcrtr
r
r�getDebugLogLevelPs

zLogger.getDebugLogLevelcCs:|�|�|dkrd}||jkr&|j}||j|j|<dS)z- Set debug log level [NO_DEBUG .. DEBUG_MAX] rN)rrrdrcrWrwr
r
rrkWs

zLogger.setDebugLogLevelcCs|jSr�rXrr
r
r�	getFormat`szLogger.getFormatcCs
||_dSrry�r	rXr
r
rrlcszLogger.setFormatcCs|jSr�rYrr
r
r�
getDateFormatfszLogger.getDateFormatcCs
||_dSrr|r{r
r
rrmiszLogger.setDateFormatcCs6|�|�}|D]"}|j||j|jd�||j|<qdS)�U Set log label for level. Level can be a single level or an array
        of levels. ��	min_level�	max_levelN)�
_getLevels�_checkLogLevelr-rbrZ�r	r�label�levelsr
r
rrels

�zLogger.setInfoLogLabelcCs:|j|dd�}|D]"}|j||j|jd�||j|<qdS)r~r)�rrN)r�r�r*rdr[r�r
r
rrius
�zLogger.setDebugLogLabelNcCs|j||||dd�dS)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. rr�N��_setLogging�r	rurqr�fmtr
r
rrn~szLogger.setInfoLoggingcCs|j||||dd�dS)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�Nr�r�r
r
rro�szLogger.setDebugLoggingcCs|j||||dd�dS)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. rr�N��_addLoggingr�r
r
r�addInfoLogging�szLogger.addInfoLoggingcCs|j||||dd�dS)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�Nr�r�r
r
r�addDebugLogging�szLogger.addDebugLoggingcCs|j||||dd�dS)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. rr�N��_delLoggingr�r
r
r�delInfoLogging�szLogger.delInfoLoggingcCs|j||||dd�dS)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�Nr�r�r
r
r�delDebugLogging�szLogger.delDebugLoggingcCs|j|dd�S)zN Is there currently any info logging for this log level (and
        domain)? rr���_isLoggingHere�r	rr
r
r�isInfoLoggingHere�szLogger.isInfoLoggingHerecCs|j|dd�S)zO Is there currently any debug logging for this log level (and
        domain)? r)r�r�r�r
r
r�isDebugLoggingHere�szLogger.isDebugLoggingHerecOs2|�|�d|d<|j|j|g|�Ri|��dS)z Fatal error log. rrN)�_checkKWargs�_logr-�r	rXrIrJr
r
r�fatal�s
zLogger.fatalcOs2|�|�d|d<|j|j|g|�Ri|��dS)z Error log. rrN)r�r�r,r�r
r
r�error�s
zLogger.errorcOs2|�|�d|d<|j|j|g|�Ri|��dS)z Warning log. rrN)r�r�r+r�r
r
r�warning�s
zLogger.warningcOsH|j|d|jd�|�|�d|d<|j||j|g|�Ri|��dS)z� Information log using info level [1..info_max].
        There are additional infox functions according to info_max from
        __init__r)rrrN)r�rbr�r�ra�r	rrXrIrJr
r
rrF�s
zLogger.infocOsB|j|d|jd�|�|�d|d<|j||g|�Ri|��dS)z� Debug log using debug level [1..debug_max].
        There are additional debugx functions according to debug_max
        from __init__r)rrN)r�rdr�r�r�r
r
rrO�s
zLogger.debugcCs|j|jt��gid�dS)N)rIrJ)r�rf�	traceback�
format_excrr
r
r�	exception�szLogger.exceptioncCs&||ks||kr"td|||f��dS)Nz*Level %d out of range, should be [%d..%d].�r`)r	rr�r�r
r
rr��s�zLogger._checkLogLevelcCs.|sdS|��D]}|dvrtd|��qdS)N)�nlr��nofmtz0Key '%s' is not allowed as argument for logging.)�keysr`)r	rJ�keyr
r
rr��s
zLogger._checkKWargscCs|r|dkrtd|��dS)NrEzDomain '%s' is not valid.r�rtr
r
rrr�szLogger._checkDomaincCs�||jkrbt|t�st|t�r$|}n|g}|D]0}|rJ|j|d|jd�q.|j||j|jd�q.n6|r�dd�t|j	|j�D�}ndd�t|j|j�D�}|S)z Generate log level array. r)rcSsg|]}|�qSr
r
rQr
r
rrT�rUz%Logger._getLevels.<locals>.<listcomp>cSsg|]}|�qSr
r
rQr
r
rrT�rU)
�ALL�
isinstance�list�tupler�rdr-rbrgZDEBUG1)r	rrr�r
r
rr��s 
�
�
zLogger._getLevelscCsJt|t�st|t�r|}n|g}|D] }t|jt�s$td|jj��q$|S)z Generate target array. z '%s' is no valid logging target.)r�r�r��
issubclass�	__class__rr`r)r	rq�targets�_targetr
r
r�_getTargets�s�zLogger._getTargetscCs�|r |j}|j}d|jdf}n|j}|j}|j|jdf}t|�dkrP|��t	|d|d�D]<}||vrpqb||D]$\}}}||vrx|�
|g��|�qxqbdS)z% Generate dict with domain by level. r)rN)r_r]rdr^r\r-rbr/�clearrg�
setdefault�append)r	rr^r\Z_rangerrurpr
r
r�_genDomainsszLogger._genDomainsc	Csd|�|�|�||�}|�|�}|r,|j}n|j}|D]}|D]}|||fg||<q>q6|�|�dSr)rrr�r�r]r\r��	r	rurqrr�rr�r�r\r
r
rr�s

zLogger._setLoggingc	Csl|�|�|�||�}|�|�}|r,|j}n|j}|D]&}|D]}|�|g��|||f�q>q6|�|�dSr)rrr�r�r]r\r�r�r�r�r
r
rr�-s

zLogger._addLoggingc
Cs�|�|�|�||�}|�|�}|r,|j}n|j}|D]x}	|D]n}|	|vrLq>|||f||	vr�||	�|||f�t||	�dkr�||	=q>||jkr>td|	||j	j
|f��q>q6|�|�dS)NrzENo matching logging for level %d, domain %s, target %s and format %s.)rrr�r�r]r\�remover/r�r`r�rr�)
r	rurqrr�rr�r�r\rVr
r
rr�<s(


�
zLogger._delLoggingcCsr|�||�}|sdS|dd}|r,|j}n|j}||D]2\}}}|dksf|�|�sft�|d|�r:dSq:dS)NFru�.rPT)�_genDictr]r\r7�fnmatch�fnmatchcase)r	rr�_dict�point_domainr\rurpr
r
rr�Us��zLogger._isLoggingHerec	Cs�|jjdkrD|jjd}||jvrD|j|}|�|j|j�}|rD|St�|j�}|j}|j|j	vr�t
|j	|jd�r�|j	|jj|kr�dS|j	��D]J\}}t
|tj�r�t
||j�r�t||j�}t
|tj�r�|j|kr�|Sq�dS)z7 Function to get calling class. Returns class or None. rZ	func_codeN)�f_code�co_argcount�co_varnames�f_locals�
_getClass2r��inspectZ	getmodule�co_name�__dict__�hasattr�__code__�itemsr��typesZ	ClassType�getattr�FunctionType)	r	�frameZselfnameZ_self�obj�module�coderp�valuer
r
r�	_getClassis,

�

zLogger._getClasscCsV|j��D]"}t|tj�r
|j|kr
|Sq
|jD]}|�||�}|r4|Sq4dS)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
rr��s



zLogger._getClass2cOshd}d|vr|d}d}d|vr(|d}d}d|vr<|d}|�||�}|sPdSt|�dkrj|||d<n&t|�dkr�||d|d<n||d<|dd}	|r�|j}
n|j}
g}|
|D]�\}}
}|
|vr�q�|d	ks�|	�|d�s�t�|d|�r�|�s|j}d
|v�r|d
}|�r.|
�|d|||�n|
�|||||�|�rX|
�d|||�|�	|
�q�dS)Nrrr)r�r�rHrur�rPr�r()
r�r/r]r\r7r�r�rXrr�)r	rrXrIrJrr�r�r�r�r\Zused_targetsrurqr
r
rr��sP��
zLogger._logc
Csg}d}|r |j}|j}|j}n|j}|j}|j}|D]H}|dkrh|||kr~d}t|�dkrbg}q�q6|||kr6|�|�q6|s�t|�dkr�dS||vr�dSt�	�}	|	r�|	j
r�|	jd|jkr�|	j
}	q�|	s�t
d��|	jd}
|
d	}|D]}|�|�r�g}�qq�|	j}t|
�}
||D]p}|�d�}|dk�r:�qn|dk�rR|d|�}n|}|
t|�k�rx|
�|��s�dSn|�|
��sdS�qd
}||v�r�||}|j|	j|
d
|jd
||t�|jt���d�	}|dd
k�r�d
|d<d}||D]}|dk�r�q�d}�q�q�|j�d�dk�sJ|j�d�dk�sJ|�sJt|�dk�rd|�|	�}|�rd|j|d<d
|d|d<|dd
k�r�|dd	|d7<|dd
k�r�|dd	|d7<t|�dk�r�|S|dd	}|D],}|�|��st�|d|��r�|S�q�dS)z Internal function. FrPTrr)Nrz Frame information not available.r�rE)	�file�liner��class�functionrur�r�dater��?z	%(domain)z%(class)r�r�ru)rWr_r[rVr^rZr/r�r�Zcurrentframe�f_back�	f_globalsrr`r7r��find�co_filename�f_linenor��time�strftimerY�	localtimerXr�rr�r�)r	rrZ
check_domainsZsimple_matchr�r^rZru�fZmodule_nameZpoint_module�co�_lenrS�dZ	level_strZ
domain_neededr�r�r
r
rr��s�






�	

��
�

�zLogger._genDict)rCrD)rP)rP)rP)rP)r)r)r)r)8rrrrr�rsr-rfr,r+rrr r!r"r#rrrvrjrxrkrzrlr}rmrerirnror�r�r�r�r�r�r�r�r�rFrOr�r�r�rrr�r�r�r�r�r�r�r�r�r�r�r
r
r
rr�sdH
;

	

					


 4r)�__all__rr�r�r�r�r#r�r<Zos.pathr$�objectrrr r"rrrr
r
r
r�<module>s.-(*