python学习笔记 day29 logging模块

 1. logging配置方式--basicConfig

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt="%a %d %b %Y:%M:%S",
                    filename='test.log',
                    filemode='w')
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

运行结果(test.log文件中会记录log信息):

如果我们想在控制台输出上述信息,可以这样:

import logging
logging.basicConfig(level=logging.DEBUG,  # DEBUG以上的级别都会打印
                    format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                    datefmt="%a %d %b %Y:%M:%S")  # asctime的格式
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

运行结果:

如果我们想打印中文的日志信息,如果是吧日志写入文件,则会乱码:

import logging
logging.basicConfig(level=logging.DEBUG,  # DEBUG 以上的信息都会打印(debug info warning error critical )
                    format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                    datefmt='%a %d %b %Y:%M %S',  # 设置日期格式
                    filename='test1.log',  # 往test.log文件中写入日志信息
                    filemode='w')

try:  # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉
    message=int(input(">>>"))  # 当用户输入非数字的内容,写入文件时 就会乱码
except ValueError:
    logging.error("您输入的格式有误,必须输入数字!")

运行结果:

 但是如果想打印的日志信息包含中文,输出在控制台就没事:

import logging
logging.basicConfig(level=logging.DEBUG,  # DEBUG 以上的信息都会打印(debug info warning error critical )
                    format='%(asctime)s %(filename)s [line:%(lineno)d] %(levelname)s %(message)s',  # 设置格式
                    datefmt='%a %d %b %Y:%M %S')  # 设置日期格式
                    # filename='test1.log',  # 往test.log文件中写入日志信息
                    # filemode='w')

try:  # 如果想要把错误信息以日志的形式写入文件中,则事先必须知道是什么类型的错误,才能进行捕捉
    message=int(input(">>>"))  # 当用户输入非数字的内容,写入文件时 就会乱码
except ValueError:
    logging.error("您输入的格式有误,必须输入数字!")

运行结果:

basic Config 有两个问题:

1. 日志信息不能同时在文件和控制台输出;

2. 往文件中输入带有中文的日志信息时,会出现乱码问题;

2. logging的配置方式----getLogger

import logging
logger=logging.getLogger()
fh=logging.FileHandler("test.log",'w',encoding='utf-8')  # 可以设置文件操作符 ,默认往文件中写的方式时 a 追加
ch=logging.StreamHandler()  # 可以往控制台输出日志信息
formatter=logging.Formatter("%(asctime)s %(filename)s %(levelname)s %(message)s")
fh.setFormatter(formatter)  # 文件操作符绑定格式
ch.setFormatter(formatter)
logger.setLevel(logging.DEBUG)  # logger对象默认设置WARNING 才会显示 我们可以通过logger.setLevel()设置级别(一定要对logger对象设置!而不是fh 文件操作符)
logger.addHandler(fh)  # logger 对象绑定文件按操作符
logger.addHandler(ch)

logging.debug("debug message(即使想输出中文的日志信息,文件中也不会出现乱码)")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")

文件中的日志信息:

 控制台的日志信息:

 1. logger对象这种配置方式解决了上述basicConfig配置方式 往文件中输入日志信息中文乱码的情况;

2.日志信息 可以同时往文件和控制台输出;

talk is cheap,show me the code
原文地址:https://www.cnblogs.com/xuanxuanlove/p/9734700.html