Introduction to Subprocess & Logging modules 1. Subprocess
This module replaces the functionality implemented by Os.system & os.pawn*.
2. Logging1. Log five levels
level means levelno1. DEBUG 详细信息,调试时用 102. INFO 工作预期内容 203. WARNING(WARN) 警告,程序运行正常 304. ERROR 错误,程序部分功能不能实现 405. CRITICAL(FATAL) 致命错误,程序不能正常运行 50
2. Formatting
格式 表示1. %(name)s Logger的名字(一般为root)2. %(levelno)s 数字形式的日志级别3. %(levelname)s 文本形式的日志级别4. %(pathname)s 调用日志输出函数的模块的完整路径,带后缀5. %(filename)s 调用日志输出函数的模块的文件名,带后缀6. %(module)s 调用日志输出函数的模块名,不带后缀7. %(funcName)s 调用日志输出的函数的函数名,可能没有,(需要使用函数调)8. %(lineno)d 调用日志输出函数的语句所在的代码行9. %(create)f 当前时间,用unix标准的时间的浮点数表示10. %(relativeCreated)d 输出日志信息时,自Logger创建以来的毫秒11. %(asctime)s 字符串形式的当前时间,默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒12. %(thread)d 线程ID13. %(threadName)s 线程名14. %(process)d 进程ID15. %(message)s 用户输入的信息,该内容为级别后面用户输入的信息
3. Time format
对于时间的字符串格式可以参考time模块的介绍,这里不做过多讲解。
4. Methods
Create a log file
方法:basicConfig(**kwargs)返回值:None#该方法接收字典类型的关键字参数。对于该方法的关键字参数主要有:filename,filemode,format,datefmt,style,level,stream,handlers。对于filemode关键字默认是‘a‘模块打开日志文件,如果指定是‘r‘模式将不能进行写入日志。
Log level
1. logging.debug(msg)#输出调试级别日志 2. logging.info(msg)#输出工作级别日志3. logging.warning(msg)#输出警告级别日志4. logging.error(msg)#输出错误级别日志5. logging.critical(msg)#输出严重级别日志
Common methods
1. logging.StreamHandler()#设置日志输出到屏幕2. logging.FileHandler(file)#设置日志输出到指定文件3. logging.getLogger(name=None)#创建一个Logger对象
5. Common classes in logging
logger
1. Logging. Logger.setlevel (level) #设置日志的最低级别2. Logging. Logger.addfilter (filter) #增加指定的filter3. Logging. Logger.removefilter (filter) #删除指定的filter4. Logging. Logger.addhandler (handler) #增加指定的handler5. Logging. Logger.removehandler (handler) #删除指定的handler6. Logging. Logger.debug (msg) #输出调试级别日志 7. Logging. Logger.info (msg) #输出工作级别日志8. Logging. Logger.warning (msg) #输出警告级别日志9. Logging. Logger.error (msg) #输出错误级别日志10. Logging. Logger.critical (msg) #输出严重级别日志
Handler
Send (logger created) log records to the appropriate destination output
1. logging.Handler.setLevel(level)#指定被处理的最低日志级别2. logging.Handler.setFormatter(fmt)#指定被处理日志的格式3. logging.Handler.addFilter(filter)#增加一个filter对象4. logging.Handler.removeFilter(filter)#删除一个filter对象5. logging.handler.
Filter
Provides the fineness of the device to determine which log record to output
Formatter
Determines the final output format of the log record
方法与上述的格式类似,比format多了一个‘%(msecs)d‘,表示创建时间的毫秒部分。
Examples of the three common types of consolidation are as follows:
logger = logging.getLogger(‘Test.log‘)#创建logger对象logger.setLevel(logging.DEBUG)#设置logger级别ch = logging.StreamHandler()#创建日志处理输出到屏幕的对象ch.setLevel(logging.DEBUG)#设置日志处理输出到屏幕输的日志级别fh = logging.FileHandler("test.log")#创建日志处理输出到文件的对象fh.setLevel(logging.WARNING)#设置日志处理输出到文件的日志级别formatter1 = logging.Formatter(‘%(name)s - %(levelname)s - %(message)s‘)formatter2 = logging.Formatter(‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘)#设置日志的格式ch.setFormatter(formatter1)#调用日志格式1到输出到屏幕对象中fh.setFormatter(formatter2)#调用日志格式2到输出到文件对象中logger.addHandler(ch)#增加日志处理,传入处理日志输出到屏幕对象logger.addHandler(fh)#增加日志处理,传入处理日志输出到文件对象logger.debug(‘debug message‘)#填写五中级别的日志logger.info(‘info message‘)logger.warn(‘warn message‘)logger.error(‘error message‘)logger.critical(‘critical message‘)
6. Handlers Sub-module
This module is mainly used for automatic truncation of log files, mainly broken down by time and size. The module needs to be imported before use, the general use method is: From logging import handlers
Handlers. Rotatingfilehandler
方法:handlers.RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]])参数: maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。 backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。
Examples are as follows:
from logging Import Handlerslogger = Logging.getlogger (__name__) #创建logger对象log_file =" Timelog.log "#声明一个文件名fh = handlers. Rotatingfilehandler (filename=log_file,maxbytes=5,backupcount=2) #日志文件按大小截断, with a maximum of 5 bytes per file, retains 2 log files and automatically deletes earlier generated log files. Formatter = logging. Formatter ('% (asctime) s% (module) s:% (Lineno) d% (message) s ') Fh.setformatter (Formatter) # Call format to log processing output to file Logger.addhandler (FH) #增加一个日志处理输出到文件logger. Warning ("Test1") logger.warning ("test12") logger.warning ("test13") logger.warning ("test14")
Handlers. Timedrotatingfilehandler
方法:handlers.TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])参数: when表示时间,具体取值如下(不区分大小写): when == S 秒 interval取值为[1,59] M 分 [60,60*60) H 小时 [60*60,60*60*24) D 天 [60*60*24,∞) W 每星期 [60*60*24*1,60*60*24*7](interval==0时代表星期一) midnight 每天凌晨 不指定
Examples are as follows:
import time from logging import handlers logger = logging.getLogger(__name__)#创建logger对象 log_file = "timelog.log"#声明一个文件名 fh = handlers.TimedRotatingFileHandler(filename=log_file,when="S",interval=2,backupCount=3)#每2秒生成一个日志文件,之保留3份日志文件。 formatter = logging.Formatter(‘%(asctime)s %(module)s:%(lineno)d %(message)s‘) fh.setFormatter(formatter)#调用格式到日志处理输出到文件 logger.addHandler(fh)#增加一个日志处理输出到文件 logger.warning("test1") time.sleep(2) logger.warning("test12") time.sleep(2) logger.warning("test13") time.sleep(2) logger.warning("test14")
Logging & subprocess of modules in Python