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