logging 模块
简介
logging 模块是 python 内置模块, 专门为打印日志的模块
- import logging
- logging.debug('debug message')
- logging.info('info message')
- logging.warning('warning message')
- logging.error('error message')
- logging.critical('critical message')
默认情况下 python 的 logging 模块将日志打印到标准输出中, 且只显示了大于等于 WARNING 的日志, 这说明默认的日志级别为 WARNING(日志级别等级 CRITICAL> ERROR> WARN> INFO> DEBUG), 默认的日志格式日志级别: Logger 名称: 用户输出消息
灵活配置日志级别, 日志格式, 输出位置:
- import logging
- fh = logging.FileHandler(filename='xxx.log',encoding='utf-8') # 存放日志的文件
- fh1 = logging.FileHandler(filename='xxx2.log',encoding='utf-8')
- sh = logging.StreamHandler() # 屏幕打印日志
- logging.basicConfig(level=logging.INFO, # 日志的级别
- handlers=[fh,sh,fh1],
- datefmt='%Y-%m-%d %H:%M:%S', # 时间
- format='%(asctime)s - %(name)s[%(lineno)d] - % (levelname)s -%(module)s: %(message)s') # 格式化格式输出
- logging.debug('debug message') # 情况越轻
- logging.info('info message') # 信息类的日志
- logging.warning('warning message')
- logging.error('error message')
- logging.critical('critical message')
日志切割
- import time
- import logging
- from logging import handlers
- sh = logging.StreamHandler()
- # 按文件大写进行切割, 只保留 5 个文件
- rh = handlers.RotatingFileHandler('myapp.log', maxBytes=1024,backupCount=5)
- # 按时间进行切割
- fh = handlers.TimedRotatingFileHandler(filename='x2.log', when='s', interval=5, encoding='utf-8')
- logging.basicConfig(
- format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
- datefmt='%Y-%m-%d %H:%M:%S %p',
- handlers=[fh,sh,rh],
- level=logging.ERROR
- )
- for i in range(1,100000):
- time.sleep(1)
- logging.error('KeyboardInterrupt error %s'%str(i))
配置参数:
- logging.basicConfig() # 函数中可通过具体参数来更改 logging 模块默认行为, 可用参数有:
- filename:# 用指定的文件名创建 FiledHandler, 这样日志会被存储在指定的文件中.
- filemode:# 文件打开方式, 在指定了 filename 时使用这个参数, 默认值为 "a" 还可指定为 "w".
- format:# 指定 handler 使用的日志显示格式.
- datefmt:# 指定日期时间格式.
- level:# 设置 rootlogger(后边会讲解具体概念) 的日志级别
- stream:# 用指定的 stream 创建 StreamHandler. 可以指定输出到 sys.stderr,sys.stdout 或者文件 (f=open('test.log','w')), 默认为 sys.stderr. 若同时列出了 filename 和 stream 两个参数, 则 stream 参数会被忽略.
- #format 参数中可能用到的格式化串:
- %(name)s #Logger 的名字
- %(levelno)s #数字形式的日志级别
- %(levelname)s #文本形式的日志级别
- %(pathname)s #调用日志输出函数的模块的完整路径名, 可能没有
- %(filename)s #调用日志输出函数的模块的文件名
- %(module)s #调用日志输出函数的模块名
- %(funcName)s #调用日志输出函数的函数名
- %(lineno)d #调用日志输出函数的语句所在的代码行
- %(created)f #当前时间, 用 UNIX 标准的表示时间的浮 点数表示
- %(relativeCreated)d #输出日志信息时的, 自 Logger 创建以 来的毫秒数
- %(asctime)s #字符串形式的当前时间. 默认格式是 "2003-07-08 16:49:45,896". 逗号后面的是毫秒
- %(thread)d #线程 ID. 可能没有
- %(threadName)s #线程名. 可能没有
- %(process)d #进程 ID. 可能没有
- %(message)s #用户输出的消息
logger 对象配置
- import logging
- logger = logging.getLogger()
- # 创建一个 handler, 用于写入日志文件
- fh = logging.FileHandler('test.log',encoding='utf-8')
- # 再创建一个 handler, 用于输出到控制台
- ch = logging.StreamHandler()
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- fh.setLevel(logging.DEBUG)
- fh.setFormatter(formatter)
- ch.setFormatter(formatter)
- logger.addHandler(fh) #logger 对象可以添加多个 fh 和 ch 对象
- logger.addHandler(ch)
- logger.debug('logger debug message')
- logger.info('logger info message')
- logger.warning('logger warning message')
- logger.error('logger error message')
- logger.critical('logger critical message')
logging 库提供了多个组件: Logger,Handler,Filter,Formatter.Logger 对象提供应用程序可直接使用的接口, Handler 发送日志到适当的目的地, Filter 提供了过滤日志信息的方法, Formatter 指定日志显示格式. 另外, 可以通过: logger.setLevel(logging.Debug) 设置级别, 当然, 也可以通过
fh.setLevel(logging.Debug) 单对文件流设置某个级别.
来源: https://www.cnblogs.com/Anesthesia-is/p/11977301.html