logging 日志模块

什么是日志
无处不在的
所有的程序必须记录日志

给用户看的
  购物软件
  视频软件
  银行卡

给内部人员看的
  给技术人员看的
    计算器
    500个表达式
    一些计算过程,或者是一些操作过程需要记录下来
    程序出现bug的时候,来帮助我们记录过程 排除错误
给非技术人员看的
   学校,公司的软件
      谁在什么时候做了什么事儿,删除操作

class Student:
    def __init__(self, name):
        self.name = name

    def select_course(self):
        print('Succussful Choose Class')
        with open('log', 'a', encoding='utf-8') as f:
            f.writer('%s : %s选课成功' % (time.strftime('%H-%M-%S'), self.name, 'python'))
            # 自己写的一条日志,太麻烦,每次都要打开文件,写入内容,所以有了logging模块
laura = Student('laura')
laura.select_course()  # 已经写入了log文件,谁在什么时间登陆

import logging  # 帮助我们以规范的形式和规范的格式或者写文件的一些信息

logging.basicConfig(level=logging.INFO)  # 都是在文件中写入信息,但是是分等级的,可以通过不同等级的信息来分析产品或用户记录
logging.debug('debug message')  # 计算或者工作的细节,正常的信息默认不显示,所以有了简单配置
logging.info('info message')   # 记录一些用户的增删改查的操作
logging.warning('input a string type')  # 警告操作
logging.error('error message')     # 错误操作
logging.critical('critical message')   # 批判的 直接导致程序出错退出的

>>>
INFO:root:info message  # 格式:等级:用户:操作(打印什么就是什么)
WARNING:root:input a string type
ERROR:root:error message
CRITICAL:root:critical message

简单配置
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='test.log',
                    filemode='w')
logging.warning('input a string type')
logging.error('EOF ERROR')  # 警告操作

>>>  # test.log文件中的内容
Mon, 10 Sep 2018 21:05:10 3,  logging i.py[line:57] WARNING input a string type
Mon, 10 Sep 2018 21:05:10 3,  logging i.py[line:58] ERROR EOF ERROR


等级可以配置,可以控制哪些消息显示哪些不显示,默认从warning开始显示,
可以控制输出的格式,如增加时间
报错的行数,如在哪一行出错
一次配置,格式不用改了,就改输入的内容以及要打印的等级。
当配置了filename时,会把下面两句都写进filename文件中。但是如果要把中文写进文件中,简单配置是不行的,不能知道编码,没有给定这个参数。对象配置可以



对象的配置
    帮助解决中文问题
    basicconfig要么往文件打,要么往屏幕输出,但是他不能既往文件打又往屏幕输出。
配置过程非常复杂,但十分灵活,可以自由配置
先创建一个log对象 : logger,绑定文件操作符,屏幕操作符
还要创建一个控制文件输出的文件操作符,绑定一个格式
还要创建一个控制屏幕输出的屏幕操作符,绑定一个格式
要创建一个格式



import logging
logger = logging.getLogger()  # 创建一个logging对象
logger.setLevel(logging.DEBUG)  # 设置显示等级,从debug开始输出了
# 创建一个控制文件输出的文件操作符
fh = logging.FileHandler('mylog.log')  # 输出的文件可以改
fh2 = logging.FileHandler('mylog2.log')  # 除了输入到mylog里,还会输出到mylog2中
sh = logging.StreamHandler()
fmt = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  # 配置已经固定好了修改时可以按照需求修改就行了
fmt2 = logging.Formatter('%(asctime)s - %(name)s[line:%(lineno)d] - %(levelname)s - %(message)s')
fh.setFormatter(fmt)
sh.setFormatter(fmt2)
sh.setLevel(logging.WARNING)  # 回到warning,如果不想在屏幕输出debug的话
logger.addHandler(sh)
logger.addHandler(fh)
logger.addHandler(fh2)

logger.debug('debug message')
logger.info('info message')
logger.warning('input a string type')
logger.error('error message')
logging.critical('critical message')





猜你喜欢

转载自blog.csdn.net/weixin_42233629/article/details/82596632