#!/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')
【python内置】07learn_logging
最新推荐文章于 2022-06-05 18:59:31 发布