Python log日志
本篇介绍Python自带日志模块logging
1、日志作用
1、记录程序执行过程
2、通过日志还原用户操作
2、日志要素
输出时间、日志级别、日志格式、日志内容、日志渠道(日志输出的位置)
3、日志级别
debug、info、warning、error、critical
4、创建一个日志收集器
import logging
from logging import handlers
1、创建日志收集器
mylog = logging.getLogger(name='mylog')
2、创建日志收集渠道
#控制台
pycharm = logging.StreamHandler()
#日志切割,秒分时日月周
#TimedRotatingFileHandler参数:
#filename:文件名称(如果不是当前路径则要带上路径)
#when: 日志滚动周期单位(切割周期单位) H:小时 S:秒 D:日 W:周 M:分
#interval:when的数值
file = handlers.TimedRotatingFileHandler(filename='test.log', when='D', interval=1, encoding='utf-8')
3、创建日志格式
# %(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 ⽤户输出的消息
fmt="[%(asctime)s-%(name)s-%(levelname)s-%(pathname)s-%(funcName)s-%(lineno)d]>>>%(message)s"
log_fmt = logging.Formatter(fmt=fmt)
4、渠道绑定日志格式
pycharm.setFormatter(fmt=log_fmt)
file.setFormatter(fmt=log_fmt)
5、日志收集器设置日志级别
mylog.setLevel(level=logging.INFO)
# 渠道也可以设置日志级别,以进行区别处理,如果只设置日志收集器的日志级别,那么渠道都默认继承日志收集器的日志级别
# pycharm.setLevel(level=logging.INFO)
# file.setLevel(level=logging.INFO)
6、给日志收集器绑定渠道
mylog.addHandler(pycharm)
mylog.addHandler(file)
5、简单封装
将上面的步骤进行整合并简单封装如下
import logging
from logging import handlers
def log_func():
# 1、创建日志收集器
mylog = logging.getLogger(name='mylog')
# 2、创建日志收集渠道
# 控制台
pycharm = logging.StreamHandler()
# 日志切割,秒分时日月周
# TimedRotatingFileHandler参数:
# filename:文件名称(如果不是当前路径则要带上路径)
# when: 日志滚动周期单位(切割周期单位) H:小时 S:秒 D:日 W:周 M:分
# interval:when的数值
file = handlers.TimedRotatingFileHandler(filename='test.log', when='D', interval=1, encoding='utf-8')
# 3、创建日志格式
# %(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 ⽤户输出的消息
fmt = "[%(asctime)s-%(name)s-%(levelname)s-%(pathname)s-%(funcName)s-%(lineno)d]>>>%(message)s"
log_fmt = logging.Formatter(fmt=fmt)
# 4、渠道绑定日志格式
pycharm.setFormatter(fmt=log_fmt)
file.setFormatter(fmt=log_fmt)
# 5、日志收集器设置日志级别
mylog.setLevel(level=logging.INFO)
# 渠道也可以设置日志级别,以进行区别处理,如果只设置日志收集器的日志级别,那么渠道都默认继承日志收集器的日志级别
# pycharm.setLevel(level=logging.INFO)
# file.setLevel(level=logging.INFO)
# 6、给日志收集器绑定渠道
mylog.addHandler(pycharm)
mylog.addHandler(file)
return mylog
logs = log_func()
接下来在其他任意文件中都可以直接导入logs实例对象来进行日志操作(此处是成本最低最简单的log单例模式,十分方便),例如
logs.debug('这是debug')
logs.info('这是info')
logs.warning('这是warning')
logs.error('这是error')