一.用于日志的书写
默认情况下,Python的logging模块输出到标准输出上,级别比warning大的才会输出,
默认日志级别设置为WARNING(日志级别等级critical> error>warning>info>defout>notest)
两个方法:
logger=logging.getLogger(logger对象名)返回一个logger对象名字默认为root
logger.setLevel(logging.级别)设置logger的日志级别
logger.addHandler(logger对象)添加logger对象到logger中
一些参数:
filename:用指定的文件名创建FileHander,日志会被存储到文件中
filemod:指定文件的打开方式,默认为“a”
format:指定handler的日志显示格式
datefmt:指定日期显示格式
level:设置rootlogger的日志级别
stream:用指定的stream创建StreamHandler,可以指定输出到sys.stderr,sys.stdout或者文件
format参数:
%(name)s logger的名字
%(levelno)s数字形式的日志级别
import logging logging. basic Config( level=logging.DEBUG, format='%(asctime)s%(filename)s %[line:%(lineno)d]s %(levelname)s %(massage)s' datefmt='%a %d %b %y %H:%M:%S'#这是对时间格式的设置 filename='test.txt'#是对输出文件的名字,可以是绝对路径 filemod='a'#文件的模式,默认为a模式) logging. debug('debug massage') logging. info('info massage') logging. warning('warning massage') logging. error('error massage') logging. critical( 'critical massage')
import logging logger=logging.getLogger() fh = logging.FileHandler('test.log')#创建一个handler,用于写入日志文件 ch = logging.StreamHandler()#创建一个handler,用于输出到控制台 formatter = logging.Formatter('%(asctime)s-%(name)s-%(levelname)s-%(massage)s') fh.setFormatter(formatter) ch.Formatter(formatter) logger.setLevel(logging.DEBUG) logger.debug('logger debug massage') logger.info('logger info massage')
写一个函数用于logging模块,以后调用只需要调用该函数
import os import time import logging from config import settings def get_logger(card_num,struct_time): if struct_time.tm_mday<23: file_name = "%s_%s_%d"% (struct_time.tm_year,struct_time.tm_mon,22) else: file_name = "%s_%s_%d"(struct_time.tm_year,struct_time.tm_mon+1,22) file_handler=logging.FileHandler( os.path.join(setting.USER_DIR_FOLDER,card_num,'record',file_name) encoding='utf-8' ) fmt = logging.Formatter(fmt="%(asctime)s : %(massage)s") file_handler.setFormatter(fmt) logger1=logging.Logger('user_logger',level=logging.INFO) odder1.addHandler(file_name) return logger1