python中 日志模块的使用

import logging

1,控制日志级别

2,控制日志格式

3,控制输出的目标文件

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=10,)

logging.debug("debug日志")    #10

logging.info('info日志') #20

logging . warning('warning日志') #30

logging . error('error日志') #40

loggingcritical('critical日志') #50

相当于火警级别:

1,大功率电器

2,抽烟

3,烧烤

4,自焚

5,炸药包

需要注意的是:1,能够同时往终端与文件记录日志    2,能够修改字符串编码

import   logging

1,logging对象:负责生产各种级别的日志

logging1 = logging.getlogging('交易用户')# 日志名用来识别日志的与神秘业务有关

2,filter对象:过滤日志

3,handler对象:控制日志输出的目标位置

fh1 = logging.FileHandler('a1.log',encoding='utf-8')

fh2=logging.FileHandler('a2.log',encoding='utf-8')

ch=logging.StreamHandler()

4,formatter对象

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

formatter2 = logging.Formatter(
    fmt='%(asctime)s - %(levelname)s :  %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S %p')

5,绑定logging对象与handler对象

logger1.addHandler(fh1)
logger1.addHandler(fh2)
logger1.addHandler(ch)

6,绑定handle对象与formatter对象

fh1.setFormatter(formatter1)
fh2.setFormatter(formatter1)
ch.setFormatter(formatter2)

7,设置日志级别,有logging对象与handler对象两层关卡,必须都放行最终日志才会被放行,通常二者级别相同

logger1.setLevel(10)
fh1.setLevel(10)
fh2.setLevel(10)
ch.setLevel(10)

8,使用logging对象产生日志

logger1.info('日志内容')

总结:由于上述步骤太繁琐,还关系到许多英语字符,不好记也就算了,还不好使用.我们就发现还有一种简单一点的方法,

是把这些步骤总结到一个字典里,如下:

先定义几个变量,为了以后该格式,和存日志的路径方便,可以不动字典了

standard_format = '%(asctime)s - task:%(name)s - %(filename)s:%(lineno)d -' \
                  ' %(levelname)s : [%(message)s]'

simple_format = '%(filename)s:%(lineno)d - %(levelname)s : [%(message)s]'

fh1_path = r'a1.log'
fh2_path = r'a2.log'

Log配置字典

LOGGING_DIC={    

'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'standard': {
        'format': standard_format
    },
    'simple': {
        'format': simple_format
    },
},# 输出格式
'filters': {},# 过滤器
'handlers': {
    #打印到终端的日志
    'ch': {
        'level': 'DEBUG',# 不同级别的日志
        'class': 'logging.StreamHandler',  # 打印到终端
        'formatter': 'simple'# 打印格式
    },
    #打印到a1.log文件的日志
    'fh1': {
        'level': 'DEBUG',# 不同级别的日志
        'class': 'logging.FileHandler',  # 保存到文件
        'formatter': 'standard',# 打印格式
        'filename': fh1_path,  # 日志文件的路径
        'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
    },
    # 打印到a2.log文件的日志
    'fh2': {
        'level': 'DEBUG',# 不同级别的日志
        'class': 'logging.FileHandler',  # 保存到文件
        'formatter': 'simple',# 打印格式
        'filename': fh2_path,  # 日志文件的路径
        'encoding': 'utf-8',  # 日志文件的编码,再也不用担心中文log乱码了
    },

},# 输出器
'loggers': {
    '': {
        'handlers': ['fh1', 'fh2', 'ch'],
        'level': 'DEBUG',
    },
},# 生成日志器

}

在执行文件中只需要如下传值:

import logging.config
import settings

logging.config.dictConfig(settings.LOGGING_DIC)

logger1=logging.getLogger('用户交易')
#logger1-> fh1,fh2,ch
logger1.info('没有设置权限')

输出结果:

a1:2018-08-10 15:41:13,542 - task:用户权限 - run.py:14 - ERROR : [没有设置权限]

a2:run.py:14 - ERROR : [没有设置权限]

猜你喜欢

转载自blog.csdn.net/qq_42737056/article/details/81568801