Python practiced hand, encapsulated log module, v1

Source: Internet
Author: User

Code: Python3

The # -*- coding: utf-8 -*-'     --encapsulates the logging module, preserving only key settings and beautifying the output format ' import  sys,random,time import logging as lgdef getrandomint (digits):      "     @args:          int digits      @returns:         string      "    return random.randint (1,10**digits-1). __str__ (). Zfill (digits)  def getnowdate (FMT):     "     @args:          string fmt     @returns:          string     '     return  Time.strftime (Fmt,time.localtime ()). __str__ () Def getoriginpath ():     "      @returns:    &Nbsp;     string     '     return  Sys.argv[0]class xlogger ():         "    - The logger  -encapsulates the logging module, discarding the cumbersome settings, preserving only the key settings, and beautifying the output format     -approximate usage:-Create Xlogger, add xhandler                 -for xlogger                      -allows you to set the log level, logger name, and parent-child recorder's propagation function                  -for xstreamhandler  console output                      -not allow settings                  -for xfilehandler  file output                      -allow set file path, file write: Overwrite/append      '          levelmap = {' DEBUG ': Lg. debug,                 ' INFO ': lg.info,                 ' WARN ' : Lg. warning,                 ' ERROR ': Lg. error,                 ' CRITICAL ': Lg. Critical}        def __init__ (self):         self.logger    = None         self.handlers  = []        self.name       =  ' root'         self.level     =  ' INFO '          self.propagate = False             def setname (Self,name):          "         @args:              string name  about Loggers-logger name (default: Root) (name can reflect the parent-child relationship of the logger)           @returns:              self         '          self.name = name        return self         def setlevel (Self,level):          '    &NBsp;     @args:              string level  about loggers-log level  debug/info/warn/error/critical (default: INFO)           @returns:              self         '          self.level = level        return self         def setpropagate (self,propagate):          "         @args:              boolean propagate  about loggers-whether to turn on the parent-child logger up-propagation feature (default: False)                                 -  if enabled, the child logger will get all the handler,        of the parent logger                         -  be careful to add handler repeatedly to avoid duplicate logs         @ returns:             self          '         self.propagate =  propagate        return self         def addhandler (Self,xhandler):         Self.handlers.append (Xhandler)         return self         def instantiate (self):          '       &NBsp;  @returns:             self          '          #Logger          self.logger = lg.getlogger (Self.name)          self.logger.setlevel (XLogger.levelMap.get (self.level))          self.logger.propagate = self.propagate          #Handler         for handler in  self.handlers :             Self.logger.addHandler (Handler.handler)         return self         def debug (self,layer,message):         self.logger.debug (' dbug  '  +&nbsP; ' | '  * layer +message)             def  info (self,layer,message):         self.logger.info (' INFO  '  +  ' | '  * layer + message)                def warning (self,layer,message):         Self.logger.warning (' warn  '  +  ' | '  * layer + message)                def error (self,layer,message):         Self.logger.error (' erro  '  +  ' | '  * layer + message)         def critical (self, Layer,message):         self.logger.critical (' CRIT  '  +  ' |··'  * layer  + message)     class XHandler:         Def __init__ (self):             self.handler  = none            self.formatter =  lg. Formatter (' [% (name) s] % (asctime) s % (message) s ', '%y/%m/%d %h:%m:%s ')          class xfilehandler (Xhandler):                 def __init__ (self):             xlogger.xhandler.__init__ (self)              self.file = getoriginpath () + '. ' +getnowdate ("%y%m%d%h%m%s") +getrandomint (4) + ' XLOG '              self.model =  ' W '                  def setfile (Self,file):              '               @args:                  string file  about file Printing-file path (Default: Origin execution file. Time + random number +xlog)               @returns:                  self              '              self.file = file            return  self                def  setmodel (Self,model):  &Nbsp;           '               @args:                  string model  about file Printing-file write mode  w overwrite  a append (default: w)               @returns:                  self              '              Self.model = model            return  self                def  instantiate (self):             "              @returns:                  self             "             self.handler = lg. Filehandler (Self.file,mode=self.model.lower (), encoding= ' UTF-8 ', Delay=false)              self.handler.setformatter (Self.formatter)              print (' Xlog file: ', self.file)              return self                 class xstreamhandler (XHandler):                 def __init__ (self):         &Nbsp;   xlogger.xhandler.__init__ (self)                  def instantiate (self):              '               @returns:                  self             '              self.handler = lg. Streamhandler ()              Self.handler.setFormatter (Self.formatter)              return self

Test:

Dir_= ' d:\\users\\ex-hexuwen001\\desktop\\work\m1-apps\\using__apps_data\\eclipse_workspace\\mypython\\ src ' file1=dir_+ ' \\1.xlog ' file2=dir_+ ' \\2.xlog ' Logger1 = xlogger (). SetLevel (' DEBUG '). Setpropagate ( True). SetName (' aaaa ')             .addhandler ( Xlogger.xfilehandler (). Setfile (File1). Setmodel (' a '). Instantiate ())              .addhandler (Xlogger.xstreamhandler (). Instantiate ())              .instantiate ()              logger1.debug (0, "Cool LAN") logger1.info (1, ' Guangdong Province ') logger1.warning (2, ' Zhaoqing ') logger1.error (2, ' Gaoyao ') logger1.critical (3, ' Cool Town ') Logger2 = xlogger (). SetLevel (' DEBUG '). Setpropagate (True). SetName (' AAAA.BBBB ')             .addhandler ( Xlogger.xfilehandler (). Setfile (File2). Setmodel (' a ').Instantiate ())             .addhandler ( Xlogger.xstreamhandler (). Instantiate ())              .instantiate ()             logger2.debug (0, " Lan ") Logger2.info (1, ' Guangdong Province ') logger2.warning (2, ' Zhaoqing ') logger2.error (2, ' Gaoyao ') logger2.critical (3, ' the Town ')

Output:

xlog file: d:\users\ex-hexuwen001\desktop\work\m1-apps\using__apps_data\eclipse_workspace\mypython\ src\1.xlog[aaaa] 18/01/12 14:14:23 dbug  LAN [Aaaa] 18/01/12 14:14:23 info  | Guangdong province [aaaa] 18/01/12 14:14:23 warn | | Zhaoqing [aaaa] 18/01/12 14:14:23 erro | | Gaoyao [aaaa] 18/01/12 14:14:23 crit | | | Niu Zhen xlog file: d:\users\ex-hexuwen001\desktop\work\m1-apps\using__apps_data\eclipse_workspace\ mypython\src\2.xlog[aaaa.bbbb] 18/01/12 14:14:23 dbug  LAN [aaaa.bbbb] 18/01/12  14:14:23 dbug  LAN [aaaa.bbbb] 18/01/12 14:14:23 info | Guangdong Province [aaaa.bbbb] 18/01/12 14:14:23 info | Guangdong province [aaaa.bbbb] 18/01/12 14:14:23 warn | | Zhaoqing [aaaa.bbbb] 18/01/12 14:14:23 warn | | Zhaoqing [aaaa.bbbb] 18/01/12 14:14:23 erro | | Gaoyao [aaaa.bbbb] 18/01/12 14:14:23 erro | | Gaoyao [aaaa.bbbb] 18/01/12 14:14:23 crit | | | Niu Zhen [aaaa.bbbb] 18/01/12 14:14:23 crit | | | Niu Zhen


Python practiced hand, encapsulated log module, v1

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.