首页 > 编程语言 > 详细

Python学习笔记二十三_日志模块

时间:2018-06-06 21:13:44      阅读:181      评论:0      收藏:0      [点我收藏+]

  日志模块是python自带的标准模块,但并不是非常好用,先来了解一下这个logging模块,之后可以自行封装一个log模块,方便在后续自动化框架中使用。

一、Logging模块

1、控制台输出日志信息,若level为INFO级别,则不输出debug log。

import logging
logging.basicConfig(level=logging.DEBUG,#控制台打印的日志级别,需要大写
                    format=%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s
                    #日志格式(时间,在python文件第几行出错,级别)
                    )
logging.debug(debug级别,最低级别,一般开发人员用来打印一些调试信息)
logging.info(info级别,正常输出信息,一般用来打印一些正常的操作)
logging.warning(waring级别,一般用来打印警信息)
logging.error(error级别,一般用来打印一些错误信息)

2、将打印的日志存入log文件,但是这里会发现log文件中中文乱码,并且控制台不在打印log

import logging
logging.basicConfig(level=logging.DEBUG,
                    filename=my.log, #加上文件名后,控制台不再输出日志
                    filemode=w, #清空以前的日志,重新写入,‘a‘在文件里追加写入
                    format=%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s
                    #日志格式(时间,在python文件第几行出错,级别)
                    )
logging.debug(debug级别,最低级别,一般开发人员用来打印一些调试信息)

3、如何让log不仅在控制台输出,并且不乱码地写入log文件呢

两件事需要找两个实例来做,一个用于控制台输出一个用于写文件

import logging
from logging import handlers
logger = logging.getLogger() #先实例化一个logger对象
logger.setLevel(logging.DEBUG) #设置日志的级别
cl = logging.StreamHandler() #负责往控制台输出的
bl = handlers.TimedRotatingFileHandler(filename=my.log,when=D,interval=1,backupCount=5,encoding=utf-8)
#负责写文件的
#when=‘S‘以秒为时间间隔单位,S:秒,M:分,H:小时,D天,W星期,interval==0代表星期一
#interval=1时间间隔,以when为单位,即1s
#backupCount最多几个备份
fmt=logging.Formatter(%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s)
#指定日志的格式
cl.setFormatter(fmt)#设置控制台输出的日志格式
bl.setFormatter(fmt)#设置文件里面写入的格式
logger.addHandler(cl)#把用于控制台输出的实例放入logger
logger.addHandler(bl)#把用于写文件的实例放入logger

logger.debug(我是debug)

二、封装写日志的类

下面将能够既在控制台可以输出,又可以写入文件的这个方法封装成写日志的类

import logging
from logging import handlers
class MyLoger():
    def __init__(self,file_name,level=info,when=D,interval=1,backupCount=5):
        logger = logging.getLogger() #先实例化一个logger对象
        logger.setLevel(self.get_level(level)) #设置日志的级别
        cl = logging.StreamHandler() #负责往控制台输出的
        bl = handlers.TimedRotatingFileHandler(filename=file_name,when=when,interval=interval,backupCount=backupCount,encoding=utf-8)
        fmt=logging.Formatter(%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s)
        cl.setFormatter(fmt)#设置控制台输出的日志格式
        bl.setFormatter(fmt)#设置文件里面写入的格式
        logger.addHandler(cl)#把用于控制台输出的实例放入logger
        logger.addHandler(bl)#把用于写文件的实例放入logger
        self.logger = logger #这样实例可以调用
    def get_level(self,str): #只传级别即可,不用level=logging.INFO
        level= {
            debug:logging.DEBUG,
            info:logging.INFO,
            warn:logging.WARNING,
            error:logging.ERROR
        }
        str = str.lower()
        return level.get(str)

mylog = MyLoger(my.log)
mylog.logger.warning(我是warning)

 

Python学习笔记二十三_日志模块

原文:https://www.cnblogs.com/dongrui624/p/9144857.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!