import logging
from logging.handlers import RotatingFileHandler
def getLogging(file: str, console: bool):
"""
获取日志对象
:param file: 日志文件落盘地址
:param console: 是否输出到控制台
:return: 日志对象
"""
logger = logging.getLogger(__name__) # 获取logger对象
logger.setLevel(level=logging.INFO) # 设置日志打印级别,例如info级别可以打印info、warning、error
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # 日志格式
# 如果当file满足1024KB之后,就转为备份文件file.1,重新写file。当file再满的时候,file.1变为file.2,file变为file.1,再重新写file
# 这个底层其实不是真实复制文件,而只是重新命名了一下文件罢了
sizeHandler = RotatingFileHandler(file, maxBytes=1024 * 1024, backupCount=10)
sizeHandler.setLevel(logging.INFO) # 设置文件打印级别
sizeHandler.setFormatter(formatter) # 设置文件打印格式
logger.addHandler(sizeHandler) # 日志对象添加文件打印
if console: # 是否输出到控制台
console = logging.StreamHandler() # 控制台打印对象
console.setLevel(logging.INFO) # 控制台打印级别
console.setFormatter(formatter) # 控制台打印设置日志格式
logger.addHandler(console) # 日志对象添加控制台打印
return logger # 返回日志对象
# 参数:作用
#
# %(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:打印日志信息
# handler名称:位置;作用
#
# 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服务器
|