008、日志模块(一) logging的使用

 

一、日志模块 logging的使用 

  logging 模块

    1)日志搜集器:
      定义日志搜集器:要从代码当中按照要求,搜集对应的日志 ,并输出到渠道当中 。
      logging模块有一个默认的日志搜集器 root,
root默认收集的日志级别:warning及warning以上 ;
    2)日志级别:
      debug——>info——>warning——>error——>critical (FATA)
      调试     基本     警告     错误     严重错误

    3)日志显示的格式:
      时间、日志级别、代码文件、第几行:信息   等,还可以添加其他信息 ;
    
4)日志输出渠道 (Handle):       文件(FileHandle) 、控制台 (StreamHandle)

 

  1、root 日志收集器 logging模块中默认的日志搜集器 ) 

    a、默认搜集的日志级别:warning 及 warning 以上 ;

    b、默认格式:日志级别:日志搜集器名:输出内容  ( 比如:WARNING:root:logging日志搜集===warning )

    c、输出渠道:默认是控制台 ;

   

  示例代码如下:

# logging模块中默认的日志收集器:root ;
# root默认收集的日志级别:warning及warning以上 ;
import logging

class Cat():

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

    def func(self):
        print('{} 的 print函数'.format(self.name))
        logging.debug('logging日志搜集===debug')
        logging.info('logging日志搜集===info')
        logging.warning('logging日志搜集===warning')
        logging.error('logging日志搜集===error')
        logging.critical('logging日志搜集===critical')

c = Cat('加菲')
c.func()
View Code

  执行结果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_07.py
加菲 的 print函数
WARNING:root:logging日志搜集===warning
ERROR:root:logging日志搜集===error
CRITICAL:root:logging日志搜集===critical

Process finished with exit code 0
View Code

 

  2、自定义日志搜集器

    第一步:创建一个日志搜集器:

        logger = logging.getLogger()

    第二步:自定义日志级别、输出格式、输出渠道 :
        a、定义日志级别  ;  logger.setLevel(logging.INFO)
        b、定义日志输出格式, 使用Formatter类实例化一个日志格式类 ;
        c、实例化渠道(Handler)  ;输出到  控制台 或 文件

    第三步:将渠道与日志搜集器绑定 ;

 

    

    a、把日志输出到  控制台 (StreamHandler),实例代码如下 :

import logging

"""
第一步:创建一个日志搜集器:
    logger = logging.getLogger()

第二步:自定义日志级别、输出格式、输出渠道;
       a、定义日志级别;
       b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
       c、实例化渠道(Handler);
       
第三步:将渠道与日志搜集器绑定

"""

# 第一步:创建一个日志搜集器:
logger = logging.getLogger('自定义的日志搜集器')


# 第二步:自定义日志级别、输出格式、输出渠道
# a、定义日志级别
logger.setLevel(logging.INFO)

# b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
formatter = logging.Formatter(fmt)

# c、实例化渠道(Handler)
# 控制台(StreamHandler)
handle1 = logging.StreamHandler()
# 设置渠道当中的日志格式
handle1.setFormatter(formatter)


# 第三步:将渠道与日志搜集器绑定
logger.addHandler(handle1)


class Cat():

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

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        logger.info('自定义日志搜集器success')


c = Cat('加菲')
c.func()
View Code

    执行结果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_08.py
我的名字是: 加菲
2021-08-02 13:34:45,409, INFO D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_08.py,line=47, 自定义日志搜集器success, 自定义的日志搜集器

Process finished with exit code 0
View Code

 

       b、把日志输出到  文件 (FileHandler) ,实例代码如下 :

      与把日志输出到 控制台 的区别:输出渠道不一样 ,文件用 FileHandler ;其他都一样 。

import logging

"""
第一步:创建一个日志搜集器:
    logger = logging.getLogger()

第二步:自定义日志级别、输出格式、输出渠道;
       a、定义日志级别;
       b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
       c、实例化渠道(Handler);
       
第三步:将渠道与日志搜集器绑定

"""

# 第一步:创建一个日志搜集器:
logger = logging.getLogger('自定义的日志搜集器')


# 第二步:自定义日志级别、输出格式、输出渠道
# a、定义日志级别
logger.setLevel(logging.INFO)

# b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
formatter = logging.Formatter(fmt)

# c、实例化渠道(Handler)
# # 控制台(StreamHandler)
# handle1 = logging.StreamHandler()
# # 设置渠道当中的日志格式
# handle1.setFormatter(formatter)

# 输出到文件()
filehandle = logging.FileHandler('testlog.txt', mode='a')
filehandle.setFormatter(formatter)

# 第三步:将渠道与日志搜集器绑定
logger.addHandler(filehandle)


class Cat():

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

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        logger.info('日志搜集器调试success')


c = Cat('加菲')
c.func()
View Code

    执行结果,在同级目录下生成  有日志信息的 testlog.txt 文件 。 如果把带有中文的日志信息输出到  .log后缀名的文件 , 在pycharm中双击打不开 ;

 

   c、在 控制台 + 文件 同时输出日志 ;   

# 第三步:将渠道与日志搜集器绑定
# 可以绑定多个输出渠道
logger.addHandler(filehandle)
logger.addHandler(streamHandler)

    完整代码如下:

import logging

"""
第一步:创建一个日志搜集器:
    logger = logging.getLogger()

第二步:自定义日志级别、输出格式、输出渠道;
       a、定义日志级别;
       b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
       c、实例化渠道(Handler);
       
第三步:将渠道与日志搜集器绑定

"""

# 第一步:创建一个日志搜集器:
logger = logging.getLogger('自定义的日志搜集器')


# 第二步:自定义日志级别、输出格式、输出渠道
# a、定义日志级别
logger.setLevel(logging.INFO)

# b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
formatter = logging.Formatter(fmt)

# c、实例化渠道(Handler)
# 控制台(StreamHandler)
streamHandler = logging.StreamHandler()
# 设置渠道当中的日志格式
streamHandler.setFormatter(formatter)

# 输出到文件()
filehandle = logging.FileHandler('testlog.txt', mode='a')
filehandle.setFormatter(formatter)

# 第三步:将渠道与日志搜集器绑定
# 可以绑定多个输出渠道
logger.addHandler(filehandle)
logger.addHandler(streamHandler)


class Cat():

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

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        logger.info('日志搜集器调试success')


c = Cat('加菲')
c.func()
View Code

    执行结果,在控制台  和  testlog.txt 都有日志文件输出 ;

 

 

      d、把 error 日志单独输出在 errorlog.txt  文件 :

      实例代码如下:

import logging

"""
第一步:创建一个日志搜集器:
    logger = logging.getLogger()

第二步:自定义日志级别、输出格式、输出渠道;
       a、定义日志级别;
       b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
       c、实例化渠道(Handler);
       
第三步:将渠道与日志搜集器绑定

"""

# 第一步:创建一个日志搜集器:
logger = logging.getLogger('自定义的日志搜集器')


# 第二步:自定义日志级别、输出格式、输出渠道
# a、定义日志级别
logger.setLevel(logging.DEBUG)

# b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
formatter = logging.Formatter(fmt)

# c、实例化渠道(Handler)
# 控制台(StreamHandler)
streamHandler = logging.StreamHandler()
# 设置渠道当中的日志格式
streamHandler.setFormatter(formatter)

# 输出到文件()
# 把 debug 日志输出到 debug.txt 文件
filehandle_debug = logging.FileHandler('debuglog.txt', mode='a')
filehandle_debug.setLevel(logging.DEBUG)
filehandle_debug.setFormatter(formatter)

# 把 error 日志输出到 errorlog.txt 文件
filehandle_error = logging.FileHandler('errorlog.txt', mode='a')
filehandle_error.setLevel(logging.ERROR)
filehandle_error.setFormatter(formatter)


# 第三步:将渠道与日志搜集器绑定
# 可以绑定多个输出渠道
logger.addHandler(filehandle_debug)
logger.addHandler(filehandle_error)
logger.addHandler(streamHandler)


class Cat():

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

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        logger.debug('debug日志')
        logger.error('error日志')


c = Cat('加菲')
c.func()
View Code

    执行结果如下,同时生成 errorlog.txt  和  debuglog.txt  2个文件,分别包含对应日志级别的信息 ;

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day10\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_08.py
我的名字是: 加菲
2021-08-02 14:14:34,522, DEBUG D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_08.py,line=61, debug日志, 自定义的日志搜集器
2021-08-02 14:14:34,523, ERROR D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day10/test_01/test_08.py,line=62, error日志, 自定义的日志搜集器

Process finished with exit code 0
View Code

 

 

   e、日志 滚动生成  ;

      a、需要引入下面的 类  和  修改输出渠道, 如下:

      b、RotatingFileHandler 是用来生成滚动日志的,适用于需要控制日志文件大小的场景

      c、maxBytes:控制单个日志文件的大小,单位是字节,也就是当单个文件大小超过这个数值时,就创建一个新的文件。

        backupCount:用于控制日志文件的数量,如果创建的日志文件数量多于这个数值,就删除最老的。

# 日志 滚动生成需要引入下面的 类
from logging import handlers
# handlers.RotatingFileHandler
# handlers.TimedRotatingFileHandler

# 输出到文件()
# 把 debug 日志 滚动输出到 debug.txt 文件
filehandle_debug = handlers.RotatingFileHandler('debuglog.txt', mode='a', maxBytes=1, backupCount=2)
 

 

      日志 滚动生成的代码如下 (根据文件大小):

import logging

# 日志 滚动生成需要引入下面的 类
from logging import handlers
# handlers.RotatingFileHandler
# handlers.TimedRotatingFileHandler

# 第一步:创建一个日志搜集器:
logger = logging.getLogger('自定义的日志搜集器')

# 第二步:自定义日志级别、输出格式、输出渠道
# a、定义日志级别
logger.setLevel(logging.DEBUG)

# b、定义日志输出格式, 使用Formatter类实例化一个日志格式类;
fmt = '%(asctime)s, %(levelname)s %(pathname)s,line=%(lineno)d, %(message)s, %(name)s'
formatter = logging.Formatter(fmt)

# c、实例化渠道(Handler)
# 控制台(StreamHandler)
streamHandler = logging.StreamHandler()
# 设置渠道当中的日志格式
streamHandler.setFormatter(formatter)

# 输出到文件()
# 把 debug 日志 滚动输出到 debug.txt 文件
filehandle_debug = handlers.RotatingFileHandler('debuglog.txt', mode='a', maxBytes=1, backupCount=2)
filehandle_debug.setLevel(logging.DEBUG)
filehandle_debug.setFormatter(formatter)


# 第三步:将渠道与日志搜集器绑定
# 可以绑定多个输出渠道
logger.addHandler(filehandle_debug)
logger.addHandler(streamHandler)


class Cat():

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

    def func(self):
        print('我的名字是: {0}'.format(self.name))
        logger.debug('debug日志111')
        logger.debug('debug日志222')
        logger.debug('debug日志333')
        logger.debug('debug日志11111')
        logger.debug('debug日志22222')
        logger.debug('debug日志33333')
        logger.error('error日志')


c = Cat('加菲')
c.func()
View Code

      执行结果如下:

 

posted @ 2021-08-02 10:03  空-山-新-雨  阅读(336)  评论(0编辑  收藏  举报