标签:code std process 处理 tor 内存耗尽 意义 变化 http
#申明:本文章参考于http://www.cnblogs.com/dahu-daqing/p/7040764.html
logging模块简介
# logging模块是python内置的标准模块,主要用于输出程序的运行日志 # 可以设置输出日志的等级,日志保存路径,日志文件回滚等 # 比print具有如下优点 # 1.可以设置不同的日志等级,只输出重要信息,而不必显示大量的调试信息 # 2.print将所有信息都输出到标准输出中,严重开发者从标准输出中查看其它数据,而logging模块可以让开发者决定将信息输出到什么地方,以及怎么输出
logging模块的基本使用
import logging logging.basicConfig( level=logging.INFO, # 这句可要可不要,真正有用的是下面的logger.setLevel(level) format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘ ) logger = logging.getLogger(‘satori‘) logger.setLevel(logging.INFO) # 这里设置成info logger.info(‘古明地盆‘) logger.debug(‘芙兰朵露斯卡雷特‘) logger.warning(‘古明地恋‘) logger.info(‘mmp‘) # 运行程序,控制台输出 ‘‘‘ 2018-06-05 14:12:20,160 - satori - INFO - 古明地盆 2018-06-05 14:12:20,160 - satori - WARNING - 古明地恋 2018-06-05 14:12:20,160 - satori - INFO - mmp ‘‘‘ # logging中可以选择很多消息级别,如debug,info,warning,error,critical。 # 通过赋予logger或者handler不同的级别,开发者就可以只输出错误信息到特定的记录文件,或者在调试时只记录调试信息 # 例如我们可以将logger的级别改成debug logging.basicConfig( #level=logging.DEBUG, # 将该句注释掉 format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘ ) logger = logging.getLogger(‘satori‘) logger.setLevel(logging.DEBUG) # 在这里设置,发现并不影响程序的运行结果 logger.info(‘古明地盆‘) logger.debug(‘芙兰朵露斯卡雷特‘) logger.warning(‘古明地恋‘) logger.info(‘mmp‘) # 运行程序,输出结果 ‘‘‘ 2018-06-05 14:12:20,160 - satori - INFO - 古明地盆 2018-06-05 14:12:20,160 - satori - DEBUG - 芙兰朵露斯卡雷特 2018-06-05 14:12:20,160 - satori - WARNING - 古明地恋 2018-06-05 14:12:20,160 - satori - INFO - mmp ‘‘‘
将日志写入到文件
# logging.basicConfig函数各参数: # filename:指定日志文件名; # filemode:和open函数意义相同,指定日志文件的打开模式,‘w‘或者‘a‘; # format:指定输出的格式和内容,format可以输出很多有用的信息 # 参数 # %(levelno)s:打印日志级别的数值 # %(levelname)s:打印日志级别的名称 # %(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0] # %(filename)s:打印当前执行程序名 # %(funcName)s:打印日志的当前函数 # %(lineno)d:打印日志的当前行号 # %(asctime)s:打印日志的时间 # %(thread)d:打印线程ID # %(threadName)s:打印线程名称 # %(process)d:打印进程ID # %(message)s:打印日志信息 # datefmt:指定时间格式,同time.strftime(); # level:设置日志级别,默认为logging.WARNNING; # stream:指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略 import logging # 设置logging,创建一个filehandler,并对输出消息的格式进行设置,将其添加到logger中,然后将日志写入到指定的文件中 logger = logging.getLogger(‘古明地盆‘) # 随便起什么名字 logger.setLevel(logging.INFO) # 设置日志等级 # 使用logging.filehandler,说白了类似于open,创建一个log.txt文件,handler为文件描述符,就类似于f=open()中的f handler = logging.FileHandler(‘log.txt‘,mode=‘a‘,encoding=‘utf-8‘) # 为文件设置日志等级 handler.setLevel(logging.INFO) # 用logging创建输出的格式 formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) # 将格式交给handler,等于handler把格式给吞掉了 handler.setFormatter(formatter) # handler作为文件句柄,已经设置好等级,又吞掉了logging设置好的formatter格式。 # 此时的handler已经准备就绪,再让它被logger吞掉,此时的logger已经完善,便可开始打印日志。 logger.addHandler(handler) # 关于设置等级,logger设置一次,handler又设置了一次。 # 设置两次不影响,可以将两个等级都设置一样,如果一方等级设置过高,即使另一方等级设置不高,那么也不会输出 # 可以将等级设置一样,保持一致 logger.info(‘古明地盆‘) logger.debug(‘芙兰朵露斯卡雷特‘) logger.warning(‘古明地恋‘) logger.info(‘mmp‘) # 执行程序,可以看到有一个txt文件,文件内容为 ‘‘‘ 2018-06-05 14:23:27,767 - 古明地盆 - INFO - 古明地盆 2018-06-05 14:23:27,767 - 古明地盆 - WARNING - 古明地恋 2018-06-05 14:23:27,767 - 古明地盆 - INFO - mmp ‘‘‘
将日志同时输出到文件和控制台
# logging中添加StreamHandler,可以将日志输出到屏幕上 import logging logger = logging.getLogger(‘古明地盆‘) logger.setLevel(level=logging.INFO) handler = logging.FileHandler(‘log1.txt‘,‘a‘,encoding=‘utf-8‘) handler.setLevel(logging.INFO) formatter = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘) handler.setFormatter(formatter) # 输出到控制台 console = logging.StreamHandler() # 由于是输出到控制台,所不需要参数 console.setLevel(logging.INFO) # 如果不指定格式,那么只输出普通的字符串 console.setFormatter(formatter) # 指定格式,按照格式输出 logger.addHandler(console) logger.addHandler(handler) logger.info(‘古明地盆‘) logger.debug(‘芙兰朵露斯卡雷特‘) logger.warning(‘古明地恋‘) logger.info(‘mmp‘) # 输出结果,可以看到txt文件和控制台都会输出如下 ‘‘‘ 2018-06-05 19:10:11,995 - 古明地盆 - INFO - 古明地盆 2018-06-05 19:10:11,995 - 古明地盆 - WARNING - 古明地恋 2018-06-05 19:10:11,995 - 古明地盆 - INFO - mmp ‘‘‘ # 一些错误的等级 ‘‘‘ FATAL:致命错误 CRITICAL:特别糟糕的事情,如内存耗尽、磁盘空间为空,一般很少使用 ERROR:发生错误时,如IO操作失败或者连接问题 WARNING:发生很重要的事件,但是并不是错误时,如用户登录密码错误 INFO:处理请求或者状态变化等日常事务 DEBUG:调试过程中使用DEBUG等级,如算法中每个循环的中间状态 ‘‘‘
标签:code std process 处理 tor 内存耗尽 意义 变化 http
原文地址:https://www.cnblogs.com/traditional/p/9141424.html