logging.basicConfig函数各参数:
filename: 指定日志文件名
filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
% (levelno)s: 打印日志级别的数值
% (levelname)s: 打印日志级别名称
% (pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
% (filename)s: 打印当前执行程序名
% (funcName)s: 打印日志的当前函数
% (lineno)d: 打印日志的当前行号
% (asctime)s: 打印日志的时间
% (thread)d: 打印线程ID
% (threadName)s: 打印线程名称
% (process)d: 打印进程ID
% (message)s: 打印日志信息
datefmt: 指定时间格式,同time.strftime()
level: 设置日志级别,默认为logging.WARNING
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
stream: 指定将日志的输出流,可以指定输出到sys.stderr, sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
例子:
import logging
logging.basicConfig(level=logging.WARNING,
format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S',
filename='parser_result.log',
filemode='w')
# logging打印信息函数:
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')
# 最终文件内只会打印'This is warning message' 该条内容
类:
class Loggers(object):
"""
日志处理类
"""
def __init__(self, path, level=logging.DEBUG):
"""
:param path: 日志路径
:param level: 日志打印级别
"""
# 创建一个日志器logger并设置其日志级别为DEBUG
self.logger = logging.getLogger(path)
self.logger.setLevel(logging.DEBUG)
# 创建一个日志器logger并设置其日志级别为DEBUG
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
# 创建一个格式器formatter并将其添加到处理器handler
formatter = logging.Formatter("%(asctime)s - %(levelname)s: %(message)s")
handler.setFormatter(formatter)
# 为日志器logger添加上面创建的处理器handler
self.logger.addHandler(handler)
# 设置文件日志
file_handler = logging.FileHandler(path)
file_handler.setFormatter(formatter)
file_handler.setLevel(logging.DEBUG)
self.logger.addHandler(file_handler)
def debug(self, message):
"""
:param message: debug信息
:return:
"""
self.logger.debug(message)
def info(self, message):
"""
:param message: info信息
:return:
"""
self.logger.info(message)
def warn(self, message):
"""
:param warn: warn 信息
:return:
"""
self.logger.warning(message)
def critical(self, message):
"""
:param message: critical 信息
:return:
"""
self.logger.critical(message)
def error(self, message):
"""
:param message: error 信息
:return:
"""
self.logger.error(message)
loguru
import sys
from loguru import logger
class Loggers(object):
def __init__(self, path):
self.logger = logger
logger.remove(None)
logger.add(path,
level='INFO',
rotation='00:00',
retention="7 days",
compression="zip",
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {file}:{name}:{function}:{line} | {message}",
enqueue=True,
encoding="utf-8",
colorize=True,
# serialize=True, # 是否转成json
backtrace=True,
diagnose=True,
catch=True)
logger.add(sys.stdout, colorize=True,
format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> <level>{message}</level>")
def debug(self, message):
"""
:param message: debug信息
:return:
"""
self.logger.debug(message)
def info(self, message):
"""
:param message: info信息
:return:
"""
self.logger.info(message)
def warning(self, message):
"""
:param warn: warn 信息
:return:
"""
self.logger.warning(message)
def critical(self, message):
"""
:param message: critical 信息
:return:
"""
self.logger.critical(message)
def error(self, message):
"""
:param message: error 信息
:return:
"""
self.logger.error(message)
def success(self, message):
"""
:param message: success 信息
:return:
"""
self.logger.success(message)