标签:date lib style int etl log 实现 dha ogg
该模块替代了os.system & os.pawn*所实现的功能。
level means levelno
1. DEBUG 详细信息,调试时用 10
2. INFO 工作预期内容 20
3. WARNING(WARN) 警告,程序运行正常 30
4. ERROR 错误,程序部分功能不能实现 40
5. CRITICAL(FATAL) 致命错误,程序不能正常运行 50
格式 表示
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 线程ID
13. %(threadName)s 线程名
14. %(process)d 进程ID
15. %(message)s 用户输入的信息,该内容为级别后面用户输入的信息
对于时间的字符串格式可以参考time模块的介绍,这里不做过多讲解。
创建日志文件
方法:basicConfig(**kwargs)
返回值:None
#该方法接收字典类型的关键字参数。对于该方法的关键字参数主要有:filename,filemode,format,datefmt,style,level,stream,handlers。对于filemode关键字默认是‘a‘模块打开日志文件,如果指定是‘r‘模式将不能进行写入日志。
日志级别
1. logging.debug(msg)#输出调试级别日志
2. logging.info(msg)#输出工作级别日志
3. logging.warning(msg)#输出警告级别日志
4. logging.error(msg)#输出错误级别日志
5. logging.critical(msg)#输出严重级别日志
常用方法
1. logging.StreamHandler()#设置日志输出到屏幕
2. logging.FileHandler(file)#设置日志输出到指定文件
3. logging.getLogger(name=None)#创建一个Logger对象
Logger
提供了应用程序可以直接使用的接口
1. logging.Logger.setLevel(level)#设置日志的最低级别
2. logging.Logger.addFilter(filter)#增加指定的filter
3. logging.Logger.removeFilter(filter)#删除指定的filter
4. logging.Logger.addHandler(handler)#增加指定的handler
5. logging.Logger.removeHandler(handler)#删除指定的handler
6. 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
将(logger创建的)日志记录发送到合适的目的输出
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
提供了细度,设备来决定输出哪条日志记录
Formatter
决定了日志记录的最终输出格式
方法与上述的格式类似,比format多了一个‘%(msecs)d‘,表示创建时间的毫秒部分。
常用三类的整合实例如下:
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‘)
该模块主要用于对于日志文件进行自动截断保存,主要分为按时间和大小进行截断。使用前需要先导入该模块,一般使用方法为:from logging import handlers
handlers.RotatingFileHandler
方法:handlers.RotatingFileHandler(filename[, mode[, maxBytes[, backupCount]]])
参数:
maxBytes用于指定日志文件的最大文件大小。如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更名,而是被删除。
实例如下:
from logging import handlers
logger = logging.getLogger(__name__)#创建logger对象
log_file = "timelog.log"#声明一个文件名
fh = handlers.RotatingFileHandler(filename=log_file,maxBytes=5,backupCount=2)#日志文件按大小截断,每个文件最大5个字节,之保留2分日志文件,自动删除较早生成的日志文件。
formatter = logging.Formatter(‘%(asctime)s %(module)s:%(lineno)d %(message)s‘)
fh.setFormatter(formatter)#调用格式到日志处理输出到文件
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 每天凌晨 不指定
实例如下:
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")
Python中模块之logging & subprocess的讲解
标签:date lib style int etl log 实现 dha ogg
原文地址:http://www.cnblogs.com/single-boy/p/7620548.html