ó  c‰`c@sddddgZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl Z de fd„ƒYZ de fd„ƒYZ d e fd „ƒYZd e fd „ƒYZde fd „ƒYZde fd„ƒYZeƒZdS(t LogTargettFileLogtLoggertlogiÿÿÿÿNcBs5eZdZd„Zdd„Zd„Zd„ZRS(s% Abstract class for logging targets. cCs d|_dS(N(tNonetfd(tself((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt__init__(sicCstdƒ‚dS(Ns%LogTarget.write is an abstract method(tNotImplementedError(Rtdatatleveltloggertis_debug((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytwrite+scCstdƒ‚dS(Ns%LogTarget.flush is an abstract method(R(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pytflush.scCstdƒ‚dS(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/eZd„Zdd„Zd„Zd„ZRS(cCstj|ƒtj|_dS(N(RRtsyststdoutR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR8s icCs|jj|ƒ|jƒdS(N(RR R(RR R R R ((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR <scCs|jƒdS(N(R(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRAscCs|jjƒdS(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 _StderrLogcBseZd„ZRS(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/eZd„Zdd„Zd„Zd„ZRS(cCs=tj|ƒtjtjjtjdƒtj tj ƒdS(Ni( RRtsyslogtopenlogtostpathtbasenameRtargvtLOG_PIDt LOG_DAEMON(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRSs icCsïd}|rtj}nl||jkr3tj}nQ||jkrNtj}n6||jkritj}n||j kr„tj }n|j dƒrª|t |ƒd }nt |ƒdkrë|dkrØtj|ƒqëtj||ƒ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"      cCstjƒdS(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   cBsAeZdZdd„Zd„Zdd„Zd„Zd„ZRS(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.pyR‚s  cCs¨|jr dStjtjB}|jjdƒr?|tjO}ntj|j|dƒ|_tj |jdƒtj |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.pyR6‡s icCs7|js|jƒn|jj|ƒ|jjƒdS(N(RR6R R(RR R R R ((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR ”s  cCs'|js dS|jjƒd|_dS(N(RRR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRšs  cCs|js dS|jjƒdS(N(RR(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR s (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 d„Zd d„Zd„Zd„Zd„Zd„Zd„Zd„Zed2d„Zed2d„Zed2d„Zed2d„Zed2d„Z ed2d„Z!d„Z"d„Z#d„Z$d„Z%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/„Z5d0„Z6dd1„Z7RS(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) iûÿÿÿiüÿÿÿiýÿÿÿiþÿÿÿiÿÿÿÿiii cCs´i|_i|_d|_d|_i|_i|_i|_i|_i|_i|_ |dkryt d|ƒ‚n|dkr˜t d|ƒ‚n|j |_ ||_ d|_||_|j|jdƒ|j|jdƒ|j|jdƒ|j|j dƒxbtd|j dƒD]J}t|d ||ƒ|j|dƒt|d |d „||ƒƒq"Wxftd|jdƒD]N}t|d ||ƒ|j|d |ƒt|d|d„||ƒƒq‡W|j|jƒ|j|jƒ|jdƒ|jdƒ|jd|j|j|j|j gƒ|jd|jgt|j|j dƒD] }|^qdƒ|jd|jgtd|jdƒD] }|^qƒdS(s Logger class initialization tisLogger: info_max %d is too lowisLogger: debug_max %d is too lows FATAL ERROR: sERROR: s WARNING: sINFO%dsinfo%dcs‡‡fd†S(Ncsˆjˆ|||Ž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%dcs‡‡fd†S(Ncsˆjˆ|||Ž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.pyRýsX                     -cCshxat|j|jdƒD]F}||jkr5qnx(|j|D]\}}}|jƒqCWqWdS(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.pyRDÉs  cCs)|j|jtjƒdgdiƒdS(NR@RA(R~RVt tracebackt format_exc(R((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt exceptionÒscCs8||ks||kr4td|||fƒ‚ndS(Ns*Level %d out of range, should be [%d..%d].(RP(RR RlRm((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRo×scCsD|s dSx3|jƒD]%}|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.pyReãscCsô||jkr—t|tƒs-t|tƒr6|}n |g}x®|D]J}|rq|j|ddd|jƒqF|j|d|jd|jƒqFWnY|rÈgt|j |jƒD] }|^q³}n(gt|j|jƒD] }|^qÞ}|S(s Generate log level array. RliRm( tALLt isinstancetlistttupleRoRTR(RRRWtDEBUG1(RR R RqRb((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyRnçs    +(cCspt|tƒst|tƒr'|}n |g}x9|D]1}t|jtƒs7td|jjƒ‚q7q7W|S(s Generate target array. s '%s' is no valid logging target.(RŠR‹RŒt issubclasst __class__RRPR(RRdttargetst_target((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyt _getTargetsüs   cCsó|r.|j}|j}d|jdf}n(|j}|j}|j|jdf}t|ƒdkru|jƒnxwt |d|dƒD]^}||kr¥qnxC||D]7\}}}||kr°|j |gƒj |ƒq°q°WqWdS(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( RªtvaluesRŠR®R±R¬t __bases__R¦R(RRµR·R¸tbaset_obj((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR¦‰s cOsüd}d|kr|d}nd}d|kr>|d}nd}d|kr]|d}n|j||ƒ}|sydSt|ƒdkrœ|||dRDR„RoR}ReRnR’R—RrRtRwRzR¹R¦R~Rš(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyR§sdG   ;                      4(t__all__RR®RËR§RœRR‚R9tos.pathRtobjectRRRRRRR(((s8/usr/lib/python2.7/site-packages/firewall/core/logger.pyts(          -(ÿÿ§ 4