c`c@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z de fdYZ de fdYZ d e fd YZd e fd YZde fd YZde fdYZeZdS(t LogTargettFileLogtLoggertlogiNcBs5eZdZdZddZdZdZRS(s% Abstract class for logging targets. cCs d|_dS(N(tNonetfd(tself((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt__init__(sicCstddS(Ns%LogTarget.write is an abstract method(tNotImplementedError(Rtdatatleveltloggertis_debug((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytwrite+scCstddS(Ns%LogTarget.flush is an abstract method(R(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytflush.scCstddS(Ns%LogTarget.close is an abstract method(R(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytclose1s(t__name__t __module__t__doc__RR RR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR&s    t _StdoutLogcBs/eZdZddZdZdZRS(cCstj|tj|_dS(N(RRtsyststdoutR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR8s icCs|jj||jdS(N(RR R(RR R R R ((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR <scCs|jdS(N(R(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRAscCs|jjdS(N(RR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRDs(RRRR RR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR7s   t _StderrLogcBseZdZRS(cCstj|tj|_dS(N(RRRtstderrR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRKs (RRR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRJst _SyslogLogcBs/eZdZddZdZdZRS(cCs=tj|tjtjjtjdtj tj dS(Ni( RRtsyslogtopenlogtostpathtbasenameRtargvtLOG_PIDt LOG_DAEMON(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRSs icCsd}|rtj}nl||jkr3tj}nQ||jkrNtj}n6||jkritj}n||j krtj }n|j dr|t |d }nt |dkr|dkrtj|qtj||ndS(Ns ii( RRt LOG_DEBUGtINFO1tLOG_INFOtWARNINGt LOG_WARNINGtERRORtLOG_ERRtFATALtLOG_CRITtendswithtlen(RR R R R tpriority((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR as"      cCstjdS(N(Rtcloselog(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRwscCsdS(N((R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRzs(RRRR RR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRRs   cBsAeZdZddZdZddZdZdZRS(s< FileLog class. File will be opened on the first write. twcCs#tj|||_||_dS(N(RRtfilenametmode(RR/R0((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRs  cCs|jr dStjtjB}|jjdr?|tjO}ntj|j|d|_tj |jdtj |j|j|_t j |jt j t j dS(Ntai(RRtO_CREATtO_WRONLYR0t startswithtO_APPENDtopenR/tfchmodtfdopentfcntltF_SETFDt FD_CLOEXEC(Rtflags((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR6s icCs7|js|jn|jj||jjdS(N(RR6R R(RR R R R ((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR s  cCs'|js dS|jjd|_dS(N(RRR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRs  cCs|js dS|jjdS(N(RR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRs (RRRRR6R RR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRs    cBseZdZdZdZdZdZdZdZe Z e Z e Zddd Zd Zd d Zd d Zd dZd dZdZdZdZdZdZdZed2dZed2dZed2dZed2dZed2dZ ed2dZ!dZ"dZ#dZ$dZ%d Z&d!Z'd"Z(d#Z)d$Z*d%Z+d&Z,dd'Z-d(Z.dd)Z/ed2dd*Z0ed2dd+Z1ed2dd,Z2dd-Z3d.Z4d/Z5d0Z6dd1Z7RS(3sL 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) iiiiiiii cCsi|_i|_d|_d|_i|_i|_i|_i|_i|_i|_ |dkryt d|n|dkrt d|n|j |_ ||_ d|_||_|j|jd|j|jd|j|jd|j|j dxbtd|j dD]J}t|d |||j|dt|d |d ||q"Wxftd|jdD]N}t|d |||j|d |t|d|d||qW|j|j|j|j|jd|jd|jd|j|j|j|j g|jd|jgt|j|j dD] }|^qd|jd|jgtd|jdD] }|^qdS(s Logger class initialization tisLogger: info_max %d is too lowisLogger: debug_max %d is too lows FATAL ERROR: sERROR: s WARNING: sINFO%dsinfo%dcsfdS(Ncsj|||S(N(tinfo(tmessagetargstkwargs(Rtx(s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt s((RRB((RRBs8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRCssDEBUG%ds DEBUG%d: sdebug%dcsfdS(Ncsj|||S(N(tdebug(R?R@RA(RRB(s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRC)s((RRB((RRBs8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRC(ss%(label)s%(message)ss%d %b %Y %H:%M:%St*N( t_levelt _debug_levelt_formatt _date_formatt_labelt _debug_labelt_loggingt_debug_loggingt_domainst_debug_domainst ValueErrorR$tNO_INFOtINFO_MAXtNO_DEBUGt DEBUG_MAXtsetInfoLogLabelR(t TRACEBACKR&trangetsetattrtsetDebugLogLabeltsetInfoLogLevelR"tsetDebugLogLevelt setFormatt setDateFormattsetInfoLoggingRRtsetDebugLogging(Rtinfo_maxt debug_maxRFti((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRsX                     -cCshxat|j|jdD]F}||jkr5qnx(|j|D]\}}}|jqCWqWdS(s Close all logging targets iN(RWR(RTRLR(RR tdummyttarget((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR8s  REcCs.|j|||jkr'|j|S|jS(s Get info log level. (t _checkDomainRFtNOTHING(Rtdomain((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytgetInfoLogLevel@s  cCsT|j|||jkr(|j}n||jkrC|j}n||j|s  cOsM|j|ddd|j|j|d|d<|j||||dS(s Debug log using debug level [1..debug_max]. There are additional debugx functions according to debug_max from __init__RliRmR N(RoRTR}R~(RR RHR@RA((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRDs  cCs)|j|jtjdgdidS(NR@RA(R~RVt tracebackt format_exc(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt exceptionscCs8||ks||kr4td|||fndS(Ns*Level %d out of range, should be [%d..%d].(RP(RR RlRm((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRoscCsD|s dSx3|jD]%}|dkrtd|qqWdS(NtnlRstnofmts0Key '%s' is not allowed as argument for logging.(snlsfmtsnofmt(tkeysRP(RRAtkey((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR}s  cCs*| s|dkr&td|ndS(NR=sDomain '%s' is not valid.(RP(RRg((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRescCs||jkrt|ts-t|tr6|}n |g}x|D]J}|rq|j|ddd|jqF|j|d|jd|jqFWnY|rgt|j |jD] }|^q}n(gt|j|jD] }|^q}|S(s Generate log level array. RliRm( tALLt isinstancetlistttupleRoRTR(RRRWtDEBUG1(RR R RqRb((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRns    +(cCspt|tst|tr'|}n |g}x9|D]1}t|jts7td|jjq7q7W|S(s Generate target array. s '%s' is no valid logging target.(RRRt issubclasst __class__RRPR(RRdttargetst_target((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt _getTargetss   cCs|r.|j}|j}d|jdf}n(|j}|j}|j|jdf}t|dkru|jnxwt |d|dD]^}||krqnxC||D]7\}}}||kr|j |gj |qqWqWdS(s% Generate dict with domain by level. iiN( RORMRTRNRLR(RRR+tclearRWt setdefaulttappend(RR RNRLt_rangeR RgRc((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt _genDomainss       c Cs|j||j||}|j|}|r@|j}n |j}x5|D]-}x$|D]}|||fg|||SqqWx-|jD]"}|j||}|rL|SqLWdS(s@ Internal function to get calling class. Returns class or None. N( RtvaluesRRRRt __bases__RR(RRRRtbaset_obj((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRs cOsd}d|kr|d}nd}d|kr>|d}nd}d|kr]|d}n|j||}|sydSt|dkr|||dRDRRoR}ReRnRRRrRtRwRzRRR~R(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRsdG   ;                      4(t__all__RRRRRRRR9tos.pathRtobjectRRRRRRR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyts(          -( 4