9.9 logging模块

9.9 logging模块

思考:logging模块有什么用?
logging:日志日记,记录某天状态。
相当于记录日记(把每一天重要的东西记录下来),但是更多的是日志(记录程序的相关信息)。

1. v1版本

  • 五条信息对应程序出错程度,运行时候自己打印
  • info(没有任何问题)-->debug(没有任何问题)-->warning(可以去做,也可以不去做)-->error(必须做)-->critical(程序崩溃)
import logging

print('1') #info状态
logging.info()
logging.debug()
logging.warning()
logging.error()
logging.critical()

import logging
name=input('name>>')
total_prize=input('total>>')

#以下日志在内存中,但一般日志都是文件
logging.info(f'{name}消费了{total_prize}') 
logging.debug(f'{name}消费了{total_prize}')
logging.warning(f'{name}消费了{total_prize}')
logging.error(f'{name}消费了{total_prize}')
logging.critical(f'{name}消费了{total_prize}')

#输出
name>> coco
total>> 5
WARNING:root:coco消费了5
ERROR:root:coco消费了5
CRITICAL:root:coco消费了5


v1缺点
1.只能打印warning以上的日志
2. 没有保存到文件

改进

  1. 日志保存到文件中
  2. info 和debug信息也要保存下来

2. v2版本

import logging

logging.basicConfig(
    filename='access.log', #置顶日志保存到文件名
    format='%(asctime)s-%(name)s-%(levelname)s-%(module)s-%(message)s', #指定日志格式
    datefmt='%Y-%m-%d %H:%M:%S %p', #时间
    level=30 #控制保存到文件的最低等级
)

#level等级说明
# logging.info() 10
# logging.debug() 20
# logging.warning() 30 
# logging.error() 40
# logging.critical() 50

name=input('name>>')
total_prize=input('total>>')

#以下日志在内存中,但一般日志都是文件
logging.info(f'{name}消费了{total_prize}') 
logging.debug(f'{name}消费了{total_prize}')
logging.warning(f'{name}消费了{total_prize}')
logging.error(f'{name}消费了{total_prize}')
logging.critical(f'{name}消费了{total_prize}')


v2缺点

  1. 对于不同项目需要不同的日志文件不灵活
  2. 一直写入文件不可控,不能打印不方便查看
  3. 参数全部固定不变

3. v3版本

(1) logger:指定哪个版本日志

import logging
logger=logging.getLogger('bank')

(2)filter:过滤,可忽略

(3)handler:是保存在文件中还是打印到屏幕


t1=logging.FileHandler('t1.log') #往文件中打印
t2=logging.FileHandler('t2.log') #往文件中打印
sm=logging.StreamHandler() #打印屏幕打印

(4)formatter:控制文件格式

f1=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(module)s : %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p')
f2=logging.Formatter('%(asctime)s : %(message)s',
                    datefmt='%Y-%m-%d %H:%M:%S %p')
f3=logging.Formatter('%(name)s %(message)s')

(5)formatter绑定到handler里去

t1.setFormatter(f1)
t2.setFormatter(f2)
sm.setFormatter(f3)

(6)handler绑定到logger里面去


log.addHandler(t1)
log.addHandler(t2)
log.addHandler(sm)

(7)设置打印级别

logger.setLevel(10) #20的不打印;控制着全部,先走全部,再走单个的,如果不设置默认30
t1.setLevel(20)
t2.setLevel(30)
sm.setLevel(40)

(8)测试

logger.info('123')
logger.debug('123')
logger.warning('123')
logger.error('123')
logger.critical('123')

(9)如何写项目日志

  1. log.log文件写入conf/log文件里面/单独写出来
  2. 在要记录日志的位置写 ' TODO 日志记录 '做标记,等稍后补上日志文件
  3. 配置不要改,参数可以修改,字典键值不要改。
  4. 可参考9.9_logging_settings.py文件
posted @ 2025-09-02 17:37  bokebanla  阅读(9)  评论(0)    收藏  举报