【python内置】07learn_logging

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# author:albert time:2019/1/23

import logging

'''logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级、日志保存路径、日志文件回滚等'''

# 1.1 基本使用
# 定义日志等级、输出格式化(时间,名字,级别,内容)
# logging.basicConfig(level = logging.DEBUG, filename = 'test.log',filemode = 'a', datefmt = '%Y-%m-%d %H:%M:%S', format = '%(asctime)s - %(process)d - %(thread)d - %(threadName)s - %(levelname)s - %(lineno)d - %(message)s')
# logger = logging.getLogger(__name__)
#
# logger.debug('c')
# logger.info('a')
# logger.warning('b')
# logger.error('d')
# logger.critical('e')
# logger.fatal('f')

# 2019-01-23 14:40:31,261 - __main__ - INFO - a
# 2019-01-23 14:40:31,261 - __main__ - WARNING - b
# 2019-01-23 14:40:31,261 - __main__ - DEBUG - c
# 2019-01-23 14:40:31,261 - __main__ - ERROR - d
# 2019-01-23 14:40:31,261 - __main__ - CRITICAL - e

# logging.basicConfig() 中各项参数解释:
# filename        指定日志文件路径名
# filemode        日志文件打开模式,w或a
# datefmt         指定时间格式
# level           日志级别,默认为logging.WARNING
# stream          指定日志输出,默认输出sys.stderr,还可输出到sys.stdout和指定文件,如果指定了filename则已filename为准。
# format          格式化输出的内容和格式
#         %(levelno)s         打印日志级别的数值
#         %(levelname)s       打印日志级别名
#         %(pathname)s        打印当前执行程序的路径
#         %(filename)s        打印当前执行程序名
#         %(funcName)s        打印日志的当前函数
#         %(lineno)d          打印日志的当前行号
#         %(asctime)s         打印日志的时间
#         %(thread)d          打印线程ID
#         %(threadName)s      打印线程名称
#         %(process)d         打印进程ID
#         %(message)s         打印日志信息

# 1.2 将日志输出到文件
# 将日志输出到文件既可以使用basicConfig()进行参数设置,也可以使用handler进行设置,这里主要是用handler方式进行设置

# logger = logging.getLogger(__name__)            #设置logging及日志输出格式化
# logger.setLevel(logging.DEBUG)
# formatter = logging.Formatter('%(asctime)s - %(process)d - %(levelname)s - %(lineno)d - %(message)s')
#
# handler = logging.FileHandler('test.log')       #创建文件操作句柄及设置等级、格式化等
# handler.setLevel(logging.DEBUG)
# handler.setFormatter(formatter)
#
# console = logging.StreamHandler()               #创建日志输出流句柄并设置
# console.setLevel(logging.WARNING)
# console.setFormatter(formatter)
#
# logger.addHandler(handler)                      #将创建的句柄加入到logger中
# logger.addHandler(console)
#
# logger.debug('a')
# logger.info('b')
# logger.warning('c')
# logger.error('d')
# logger.critical('e')
# logger.fatal('f')

# handler 除了filehandler、streamhandler还有如下:

# StreamHandler:        logging.StreamHandler                    日志输出到流,可以是sys.stderr,sys.stdout或者文件
# FileHandler:          logging.FileHandler                      日志输出到文件
# BaseRotatingHandler:  logging.handlers.BaseRotatingHandler     基本的日志回滚方式
# RotatingHandler:      logging.handlers.RotatingHandler         日志回滚方式,支持日志文件最大数量和日志文件回滚
# TimeRotatingHandler:  logging.handlers.TimeRotatingHandler     日志回滚方式,在一定时间区域内回滚日志文件
# SocketHandler:        logging.handlers.SocketHandler           远程输出日志到TCP/IP sockets
# DatagramHandler:      logging.handlers.DatagramHandler         远程输出日志到UDP sockets
# SMTPHandler:          logging.handlers.SMTPHandler             远程输出日志到邮件地址
# SysLogHandler:        logging.handlers.SysLogHandler           日志输出到syslog
# NTEventLogHandler:    logging.handlers.NTEventLogHandler       远程输出日志到Windows NT/2000/XP的事件日志
# MemoryHandler:        logging.handlers.MemoryHandler           日志输出到内存中的指定buffer
# HTTPHandler:          logging.handlers.HTTPHandler             通过"GET"或者"POST"远程输出到HTTP服务器

# 1.3 日志回滚
# from logging.handlers import RotatingFileHandler
#
# logger = logging.getLogger('07learn_logging')            #设置logging及日志输出格式化
# logger.setLevel(logging.DEBUG)
# formatter = logging.Formatter('%(asctime)s - %(process)d - %(levelname)s - %(lineno)d - %(message)s')
#
# handler = RotatingFileHandler('test.log','a',1024,3)    #创建日志回滚句柄及设置级别和格式
# handler.setLevel(logging.INFO)
# handler.setFormatter(formatter)
#
# logger.addHandler(handler)                      #将回滚句柄添加至logger
#
# logger.debug('a')
# logger.info('b')
# logger.warning('c')
# logger.error('d')
# logger.critical('e')
# try:
#     open('wwwwwwwww')
# except:
#     logger.exception('meiyou wenjian ')
# logger.fatal('f')

# 1.4 通过配置文件进行日志配置
import json
import logging.config
import os
import yaml

class Logger(object):
    def __init__(self, default_path = r'../application/application.json', default_level = logging.DEBUG):
        path = default_path
        if os.path.exists(path):  # 判断路径是否存在
            with open(path, 'r', encoding='UTF-8') as f:  # 给定文件存在打开文件
                name, postfix = os.path.splitext(path)  # 拆分给定路径的后缀并判断
                if postfix == '.json':
                    config = json.load(f)  # 加载文件内容
                if postfix == '.yml':
                    config = yaml.load(f)
                logging.config.dictConfig(config)  # 将配置文件内容加载到logging配置中
        else:
            logging.basicConfig(level=default_level, filename='../logs/debug.log', filemode='a',
                                format='%(asctime)s - %(process)d - %(thread)d - %(threadName)s - %(levelname)s - %(lineno)d - %(message)s')


    def debug(self, msg):
        return logging.debug(msg)

    def info(self, msg):
        return logging.info(msg)

    def warning(self, msg):
        return logging.warning(msg)

    def error(self, msg):
        return logging.error(msg)

if __name__ == '__main__':
    logger = Logger()
    logger.debug('1')
    logger.info('2')
    logger.warning('3')
    logger.error('4')



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值