python基础-logging模块
loggging日志
python的logging模块提供了通用的日志系统.这个模块提供不同的日志级别,并可以采用不同的方式记录日志
注意:python文件的命名是有讲究的,不要把文件名命名的和模块名字一样,这样会一直报错,比如你这里如果命名为logging.py就会一直报错
logging.basicCongfig函数各参数:
1.filename 指定日志文件名
2.filemode 和file函数意义相同,指定日志文件的打开模式,'w'和'a'
3.format 指定输出的格式和内容,format可以输出很多有用信息:
%(levelno)s 打印日志级别的数值
%(levelname)s 打印日志级别名称
%(pathname)s 打印当前执行程序的路径
%(filename)s 打印当前执行名
%(funcName)s 打印日志的当前函数
%(lineno)d 打印日志的当前行号
%(lasctime)s 打印日志的时间
%(thread)d 打印线程ID
%(threadName)s 打印线程名称
%(process)d 打印进程ID
%(message)s 打印日志信息
4.level 设置统一日志处理器的级别,默认为logging.WARNING
日志信息,输出在控制台
import logging import os ''' logging.basicConfig:日志的统一处理器,对日志的输出格式和方式做配置 日志级别等级CRITICAL > ERROR > WARNIG > INFO >DEBUG, ''' #log_file = os.path.join(os.getcwd(),'wlog.log') #日志格式信息: 日志时间 当前执行名 当前行号 日志级别名称 打印日志信息 log_format = "%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s" ''' level设定本级别以及以上级别的才会打印.这里注意大小写! 如果你不写filename和filemode参数则会默认打印到console ''' #level:日志级别 (.)后面是大写, format:日志格式 logging.basicConfig(level = logging.WARNING,format = log_format) #logging.basicConfig(level = logging.WARNING,format = log_format,filename = log_file,filemode = 'w') #打印日志, #级别规则 #warning级别,可以打出来CRITICAL > ERROR > WARNIG级别的日志 logging.warning('warning message') #error级别 logging.error('error message') logging.debug('debug message')
只在控制台输出,结果:
2017-06-18 23:04:55,444 日志.py [line:26] WARNING: warning message
2017-06-18 23:04:55,444 日志.py [line:28] ERROR: error message
日志信息,输出在指定位置的文件中
import logging import os ''' logging.basicConfig:日志的统一处理器,对日志的输出格式和方式做配置 日志级别等级CRITICAL > ERROR > WARNIG > INFO >DEBUG, ''' #os的拼接,记录文件的路径,os取的当前路径,也可以自己设置位置,wlog.log文件名称 log_file = os.path.join(os.getcwd(),'wlog.log') print(os.getcwd()) #日志格式信息: 日志时间 当前执行名 当前行号 日志级别名称 打印日志信息 log_format = "%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s" ''' level设定本级别以及以上级别的才会打印.这里注意大小写! 如果你不写filename和filemode参数则会默认打印到console ''' #level:日志级别 (.)后面是大写, format:日志格式 #logging.basicConfig(level = logging.WARNING,format = log_format) logging.basicConfig(level = logging.WARNING,format = log_format,filename = log_file,filemode = 'w') #打印日志, #级别规则 #warning级别,可以打出来CRITICAL > ERROR > WARNIG级别的日志 logging.warning('warning message') #error级别 logging.error('error message') logging.debug('debug message')
只在指定位置的输出日志文件,结果:
同时在控制台和指定路径的文件中输出日志信息
import logging '''实现,让日志信息既在控制台,也在指定路径的文件中输出''' #日志级别等级 CRITICAL > ERROR > WARNING > INFO > DEBUG #创建一个logger,顶级的根目录getlogger,有两个分支,一个是FileHander,一个是StreamHandler logger = logging.getLogger('mylogger') logger.setLevel(logging.INFO) #创建一个handler,将log写入文件 fh = logging.FileHandler('D:\python workspace\wlog_console.log',mode = 'w') fh.setLevel(logging.INFO) #再创建一个handler,将log输出到控制台 ch = logging.StreamHandler() ch.setLevel(logging.INFO) #设置输出格式 log_format = "%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s: %(message)s" #把格式添加进来 formatter = logging.Formatter(log_format) fh.setFormatter(formatter) ch.setFormatter(formatter) #把handler添加到logger里,其实你理解为汇报给大领导即可 logger.addHandler(fh) logger.addHandler(ch) logger.error('下雨了')
logger.info('打雷了')
logger.debug('收衣服了')
结果:
控制台输出:
2017-06-19 00:14:01,182 日志2.py [line:32] ERROR: 下雨了
2017-06-19 00:14:01,182 日志2.py [line:33] INFO: 打雷了
文件中输出: