Python之日志处理(logging模块二实战)
实战篇
1 import logging 2 import logging.handlers 3 4 LOG_PATH = r'./' 5 6 def logConfig_1(): 7 ''' 8 配置 log 输出到文件 : fileName 中 9 ''' 10 fileName = LOG_PATH + r"\%s.txt"%getlogname() 11 #print(lfname) 12 logformat='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' 13 logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别 14 filename=fileName, 15 filemode='a',##模式,有w和a,w就是写模式,每次都会重新写日志,覆盖之前的日志 16 #a是追加模式,默认如果不写的话,就是追加模式 17 format=logformat 18 #日志格式 19 ) 20 print('logConfig_2配置完成') 21 #logConfig_1()#配置log 22 23 def logConfig_2(): 24 ''' 25 配置 log 输出到文件 和 控制台: 26 即 需要2个处理器: 27 1-输出到文件 28 2-输出到控制台 29 ''' 30 logfilename = LOG_PATH + r"\%s.txt"%getlogname() 31 logformat_1='%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s' 32 33 34 #获取日志器 Logger ,并取名 'mylogger' 35 logger = logging.getLogger('mylogger') 36 logger.setLevel(logging.DEBUG)#统一设置log打印级别 37 logger.handler = [] 38 39 #创建处理器 Handler:fileHandler、streamHandler 40 fileHandler = logging.FileHandler(logfilename)#输出到文件 41 fileHandler.setFormatter(logging.Formatter(logformat_1)) 42 43 streamHandler = logging.StreamHandler()#输出到控制台 44 streamHandler.setLevel(logging.ERROR)#可单独对handler设置log打印级别 45 logformat_2=' %(name)s-%(asctime)s - %(module)s-%(funcName)s[line:%(lineno)d] - %(levelname)s: %(message)s' 46 streamHandler.setFormatter(logging.Formatter(logformat_2)) 47 48 #将处理器添加到日志器中 49 logger.addHandler(fileHandler) 50 logger.addHandler(streamHandler) 51 52 print('logConfig_2配置完成') 53 return logger 54 #全局变量 55 logger = logConfig_2()#配置log,在其他模块中引用的时候直接运用logger,不能再次创建 56 57 def getlogname(): 58 logfilename = time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) 59 return logfilename 60 61 62 if __name__ == '__main__': 63 #logging.debug('debug message %s - %d ......','hello', 1) 64 65 logger.debug('debug message') 66 logger.info('info message') 67 logger.warning('warning message') 68 logger.error('error message') 69 logger.critical('critical message')
其他模块中引用:
1 import logging 2 import loggingtest1 3 from logConfig import * 4 5 #logger = logConfig_2() #不能重新获取,否则会多次打印 6 logger.debug('debug message') 7 logger.info('info message') 8 logger.warning('warning message') 9 logger.error('error message') 10 logger.critical('critical message') 11 12 loggingtest1.test()
1 import logging 2 from logConfig import * 3 4 #logger = logConfig_2() #同样不能调用该函数,否则会重复打印,调用n 5 次打印+n次 6 7 def test(): 8 flag = 'test1-test' 9 logger.debug('debug message%s',flag) 10 logger.info('info message%s',flag) 11 logger.warning('warning message%s',flag) 12 logger.error('error message%s',flag) 13 logger.critical('critical message%s',flag)
注意:不能多次创建处理器(handler),否则会打印+n次,解决办法就是定义全局变量,使用同一个logger去打印