log日志模块
log日志
工作日志分四个大类:
系统日志:记录服务器的一些重要信息:监控系统,cpu温度,网卡流量,重要的硬件的一些指标,运维人员经常使用的,运维人员,记录操作的一些指令.
网站日志: 访问异常,卡顿,网站一些板块,受欢迎程度,访问量,点击率.等等,蜘蛛爬取次数等等.
辅助开发日志: 开发人员在开发项目中,利用日志进行排错,排除一些避免不了的错误(记录),辅助开发.
记录用户信息日志: 用户的消费习惯,新闻偏好,等等.(数据库解决)
日志: 是谁使用的? 一般都是开发者使用的.
三个版本:
Low版(简易版).
标配版(标准版)
import logging
def log(lj):
# 创建一个logging对象
logger = logging.getLogger()
# 创建一个文件对象
fh = logging.FileHandler(lj, encoding='utf-8')#传参
# 创建一个屏幕对象
sh = logging.StreamHandler()
# 配置显示格式
# formatter1变量名
formatter1 = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
formatter2 = logging.Formatter('%(asctime)s %(message)s')
fh.setFormatter(formatter1)#绑定 屏幕文件
sh.setFormatter(formatter2) #绑定屏幕
logger.addHandler(fh)#绑定文件
logger.addHandler(sh)#绑定屏幕
# 总开关
logger.setLevel(10)
fh.setLevel(10)#文件级别
sh.setLevel(50)#屏幕级别
logging.debug('调试模式') # 10
logging.info('正常模式') # 20
logging.warning('警告信息') # 30
logging.error('错误信息') # 40
# logging.critical('严重错误信息') # 50
log(r'D:\s23\day19 包的初识 日志模块\day19\日志\标配版日志\aaa\zz.log')
旗舰版(项目中使用的,Django项目)
自定制(通过字典的方式)
轮转日志的功能
"""
logging配置
"""
import os
import logging.config
# 定义三种日志输出格式 开始
def load_my_logging_cfg(n):
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.dirname(os.path.abspath(__file__)))+"\log" # log文件的目录**************************
logfile_name = '创建课程'+'.log' # log文件名************** 'all2.lg'
# 如果不存在定义的日志目录就创建一个
if not os.path.isdir(logfile_dir):
os.mkdir(logfile_dir)
# log文件的全路径 调最外层'handlers'里面
logfile_path = os.path.join(logfile_dir, logfile_name)
# log配置字典
# LOGGING_DIC第一层的所有的键不能更改
LOGGING_DIC = {
'version': 1, # 版本号
'disable_existing_loggers': False, # 固定写法
'formatters': {
'standard': {
'format': standard_format##********绑定上面的3种格式之一对应下面字典 'formatter'
},#标准的格式
'simple': {
'format': simple_format
},#简单的格式
'chaojiandan':{'format':id_simple_format},#超简单的格式绑定上面的3种格式之一对应下面字典 'formatter'
}, # 配置格式 上面3个 选其中一个 上面调了 下面也调
'filters': {}, # 固定空字典 过滤模式
'handlers': {
# 打印到终端的日志
'console': {
'level': 'ERROR',######调级别 5个级别 屏幕显示只要调这个 可以改
'class': 'logging.StreamHandler', # 打印到屏幕 固定的
'formatter': 'simple' ##****调屏幕显示格式 可以改 对应'standard'里面的键 'standard' 'simple'
},
# 打印到文件的日志,收集info及以上的日志
'default': {
'level': 'DEBUG',######调级别5个级别 文件显示只要调这个 可以改
'class': 'logging.handlers.RotatingFileHandler', # 配置轮转 保存到文件 固定不变
'formatter': 'standard',###****调文件显示格式 可以改 对应'standard'里面的键 'standard' 'simple'
'filename': logfile_path, # 日志文件 对应 log文件的全路径 要一一对应
'maxBytes': 1024*1024*5, # 日志大小 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(n):
logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置 固定不变
logger = logging.getLogger('ATM日志') # 生成一个log实例
logger.debug(n) # 记录该文件的运行状态 比如存钱logger.info(n) 可以配置5个级别
#[2019-07-06 22:35:37,315][MainThread:11308][task_id:ATM][common.py:104][INFO][11111111]
# if __name__ == '__main__':
# load_my_logging_cfg(555)
# pass
# logging.debug('debug message')#10调试模式 括号里面是提示
# logging.info('info message')#20正常模式
# logging.warning('warning message')#30警告模式
# logging.error('error message')#40错误信息 ERROR
# logging.critical('critical message')#50严重错误信息
非学,无以致疑;非问,无以广识