logging日志模块,四种方式 1.最简单的用法 import logging logging.error("hah") logging.info("hah") logging.debug("hah") logging.warning("hah") logging.critical("hah") info,debug并不会显示,默认级别为30 级别debug(10) 级别info(20) 级别warning(30) 级别error(40) 级别critical(50) 2.自定义日志格式 日志基本设置 只能设置显示的信息格式,并不能设置日志级别和输出(屏幕或文件) logging.basicConfig(format="%(levelno)s-%(asctime)s-%(message)s") logging.error("hah") logging.info("hah") logging.debug("hah") logging.warning("hah") logging.critical(
import logging
info,debug并不会显示,默认级别为30
级别debug(10)
级别info(20)
级别warning(30)
级别error(40)
级别critical(50)
2.自定义日志格式
info,debug并不会显示,默认级别为30
级别debug(10)
级别info(20)
级别warning(30)
级别error(40)
级别critical(50)
2.自定义日志格式
info,debug并不会显示,默认级别为30
级别debug(10)
级别info(20)
级别warning(30)
级别error(40)
级别critical(50)
2.自定义日志格式
import logging
日志基本设置
只能设置显示的信息格式,并不能设置日志级别和输出(屏幕或文件)
3.自定义日志
设置级别,之前两种方法都是warning级别以上输出
设置输出,之前两种方法都是输出到屏幕
四个重要组件
1.Logger 日志生成器 负责产生一条完整的日志
2.Filter 过滤器 负责对日志进行过滤(不常用,可以通过格式或级别过滤输出)
3.Handler 处理器 负责将日志输出到指定位置
4.Formater 格式化 负责处理日志显示的格式
import logging
# 1.创建1个logger:
# 2.创建handler(负责输出,输出到屏幕streamhandler,输出到文件filehandler)
sh = logging.StreamHandler()
# 3.创建formatter:
# 4.绑定关系:①logger绑定handler
lg.addHandler(fh)
lg.addHandler(sh)
# ②为handler绑定formatter
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# 5.设置日志级别(日志级别两层关卡必须都通过,日志才能正常记录)
lg.setLevel(10)
fh.setLevel(10)
sh.setLevel(10)
# 6.调用日志
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
3.自定义日志
设置级别,之前两种方法都是warning级别以上输出
设置输出,之前两种方法都是输出到屏幕
四个重要组件
1.Logger 日志生成器 负责产生一条完整的日志
2.Filter 过滤器 负责对日志进行过滤(不常用,可以通过格式或级别过滤输出)
3.Handler 处理器 负责将日志输出到指定位置
4.Formater 格式化 负责处理日志显示的格式
import logging
# 1.创建1个logger:
# 2.创建handler(负责输出,输出到屏幕streamhandler,输出到文件filehandler)
sh = logging.StreamHandler()
# 3.创建formatter:
# 4.绑定关系:①logger绑定handler
lg.addHandler(fh)
lg.addHandler(sh)
# ②为handler绑定formatter
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# 5.设置日志级别(日志级别两层关卡必须都通过,日志才能正常记录)
lg.setLevel(10)
fh.setLevel(10)
sh.setLevel(10)
# 6.调用日志
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
3.自定义日志
设置级别,之前两种方法都是warning级别以上输出
设置输出,之前两种方法都是输出到屏幕
四个重要组件
1.Logger 日志生成器 负责产生一条完整的日志
2.Filter 过滤器 负责对日志进行过滤(不常用,可以通过格式或级别过滤输出)
3.Handler 处理器 负责将日志输出到指定位置
4.Formater 格式化 负责处理日志显示的格式
import logging
# 1.创建1个logger:
# 2.创建handler(负责输出,输出到屏幕streamhandler,输出到文件filehandler)
sh = logging.StreamHandler()
# 3.创建formatter:
# 4.绑定关系:①logger绑定handler
lg.addHandler(fh)
lg.addHandler(sh)
# ②为handler绑定formatter
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# 5.设置日志级别(日志级别两层关卡必须都通过,日志才能正常记录)
lg.setLevel(10)
fh.setLevel(10)
sh.setLevel(10)
# 6.调用日志
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
3.自定义日志
设置级别,之前两种方法都是warning级别以上输出
设置输出,之前两种方法都是输出到屏幕
四个重要组件
1.Logger 日志生成器 负责产生一条完整的日志
2.Filter 过滤器 负责对日志进行过滤(不常用,可以通过格式或级别过滤输出)
3.Handler 处理器 负责将日志输出到指定位置
4.Formater 格式化 负责处理日志显示的格式
import logging
# 1.创建1个logger:
# 2.创建handler(负责输出,输出到屏幕streamhandler,输出到文件filehandler)
sh = logging.StreamHandler()
# 3.创建formatter:
# 4.绑定关系:①logger绑定handler
lg.addHandler(fh)
lg.addHandler(sh)
# ②为handler绑定formatter
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# 5.设置日志级别(日志级别两层关卡必须都通过,日志才能正常记录)
lg.setLevel(10)
fh.setLevel(10)
sh.setLevel(10)
# 6.调用日志
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
sh = logging.StreamHandler()
# 3.创建formatter:
# 4.绑定关系:①logger绑定handler
lg.addHandler(fh)
lg.addHandler(sh)
# ②为handler绑定formatter
fh.setFormatter(formatter)
sh.setFormatter(formatter)
# 5.设置日志级别(日志级别两层关卡必须都通过,日志才能正常记录)
lg.setLevel(10)
fh.setLevel(10)
sh.setLevel(10)
# 6.调用日志
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
4.导入模块,不用重复造轮子,已经有写好的模块可以直接调用
(以下内容老男孩egon老师博客复制来的)
import os
import logging.config
定义三种日志输出格式 开始
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
'[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s'
定义日志输出格式 结束
logfile_dir = os.path.dirname(os.path.abspath(file)) # log文件的目录
logfile_name = 'all2.log' # log文件名
如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir)
log文件的全路径
logfile_path = os.path.join(logfile_dir, logfile_name)
log配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
},
'filters': {},
'handlers': {
#打印到终端的日志
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
#打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件
'formatter': 'standard',
'filename': logfile_path, # 日志文件
'maxBytes': 102410245, # 日志大小 5M
'backupCount': 5,
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
},
'loggers': {
#logging.getLogger(name)拿到的logger配置
'': {
'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕
'level': 'DEBUG',
'propagate': True, # 向上(更高level的logger)传递
},
},
}
def load_my_logging_cfg(msg):
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置
logger = logging.getLogger(name) # 生成一个log实例
logger.info(msg) # 记录该文件的运行状态
if name == 'main':
load_my_logging_cfg()