PYTHON - logging模块

logging模块

python标准库自带的日志模块

设置日志级别

需要导入日志模块

import logging

Logging 中几种级别:DEBUG < INFO < WARNING < ERROR < CRITICAL

日志等级描述
DEBUG调试信息通常在诊断问题的时候用得着
INFO普通信息认程序按照预期运行
WARNING警告信息表示发生意想不到的事情或者指示接下来可能会出现一些问题但是程序还是继续运行
ERROR错误信息程序运行中出现了一些问题程序某些功能不能执行
CRITICAL危险信息一个严重的错误导致程序无法继续运行
#设置日志级别  注意大写
logging.basicConfig(level=logging.INFO)
# debug调试信息
logging.debug('this is debug')
# 普通信息
logging.info('this is debug')
# 警告信息
logging.warning('this is debug')
# 错误信息
logging.error('this is debug')
# 危险信息
logging.critical('this is critical')
#当级别不够INFO等级的,不会提示

配置格式

格式描述
%(asctime)s日志事件发生的时间
%(levelname)s该日志记录的日志级别
%(message)s日志记录的文本内容
**%(name)s所使用的日志器名称,默认是’root’
%(pathname)s调用日志记录函数的文件的全路径
%(filename)s调用日志记录函数的文件
%(funcName)s调用日志记录函数的函数名
%(lineno)d调用日志记录函数的代码所在的行号
logging.basicConfig(level=logging.INFO,format ='时间:%(asctime)s  日志级别:%(levelname)s  日志内容:%(message)s 行数:%(lineno)d')

日志写入文件

logging.basicConfig(level = logging.INFO,                 #写入的级别
                    format='%(asctime)s,%(filename)s,%(lineno)s', #写入文件的格式
                    filename='jiuchengdebug.log',         #写入文件的文件名
                   	filemode='a+')                        #写入的模式

模块化组件

logging模块还提供了模块化组件的方法来灵活配置日志记录器

组件说明
Loggers(日志记录器)提供程序直接使用的接口
Handlers(日志处理器)将记录的日志发送到指定的位置
Filters(日志过滤器)用于过滤特定的日志记录
Formatters(日志格式器)用于控制日志信息的输出格式

流程如下

import logging

# 创建一个logger
my_logger = logging.getLogger('test_log')
# 设置级别
my_logger.setLevel(logging.DEBUG)
# 定义handler
# 在控制台输出
my_handCmd = logging.StreamHandler()
my_handCmd.setLevel(logging.DEBUG)

# 在文件中显示
my_handFile = logging.FileHandler('ftest.log', encoding='utf-8',mode='a+')
my_handFile.setLevel(logging.DEBUG)

# 格式化输出
Cmdformatter = logging.Formatter(
    '时间:%(asctime)s,'
    '日志级别:%(levelname)s'
    '日志消息:%(message)s'
)
Fileformatter = logging.Formatter('时间:%(asctime)s,日志级别:%(levelname)s,日志内容:%(message)s,行数:%(lineno)d')

# 以什么样的格式输出
my_handCmd.setFormatter(Cmdformatter)
my_handFile.setFormatter(Fileformatter)

# 将logger添加到handle里面
my_logger.addHandler(my_handCmd)
my_logger.addHandler(my_handFile)

#使用
# debug调试信息
my_logger.debug('this is debug')
# 普通信息
my_logger.info('this is debug')
# 警告信息
my_logger.warning('this is debug')
# 错误信息
my_logger.error('this is debug')
# 危险信息
my_logger.critical('this is critical')

#以上代码就实现了一个同时在控制台输出日志信息和文件写入日志信息的日志管理器

封装示例

import logging


class My_logger:
    def __init__(self,log_name,log_level = logging.DEBUG,log_file = 'myfile.log'):
        """
        :param log_name: 日志名称
        :param log_level:日志级别
        :param log_file:日志文件名
        """
        self.logger_name = log_name
        self.logger_lever = log_level
        self.logger_file = log_file


    #创建logger对象
    def create_Logger(self):
        my_logger = logging.getLogger(self.logger_name)
        my_logger.setLevel(self.logger_lever)
        #创建文件处理器
        my_handFile = logging.FileHandler(self.logger_file, encoding='utf-8', mode='a+')
        my_handFile.setLevel(self.logger_lever)
        #创建控制台处理器,在控制台输出
        my_handCmd = logging.StreamHandler()
        my_handCmd.setLevel(self.logger_lever)
        # 设置输出格式
        Cmd_formatter = logging.Formatter('时间:%(asctime)s,'
                                          '日志级别:%(levelname)s,'
                                          '消息文件:%(filename)s,'
                                          '日志内容:%(message)s,'
                                          '行数:%(lineno)d。'
                                          '\r\n\n')
        File_formatter = logging.Formatter('时间:%(asctime)s,'
                                           '日志级别:%(levelname)s,'
                                           '消息文件:%(filename)s,'
                                           '日志内容:%(message)s,'
                                           '行数:%(lineno)d。'
                                           '\r\n\n')
        # 以什么样的格式输出,将格式添加到处理器中
        my_handCmd.setFormatter(Cmd_formatter)
        my_handFile.setFormatter(File_formatter)
        # 将handle添加到logger里面
        my_logger.addHandler(my_handCmd)
        my_logger.addHandler(my_handFile)
        #返回创建的logger对象
        return my_logger


if __name__ == '__main__':
    log = My_logger('my',logging.DEBUG).create_Logger()
    try:
        print(a)
    except Exception as e:
        log.debug(e)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值