使用方式:
- 创建一个logger.py文件,将代码复制进去。
- 在另一个python脚本main.py中,直接导入 from logger import getLogging
- 创建日志对象 logger = getLogging("/tmp/logs/filename", True),第二参数为True,表示调用脚本时(python3 main.py),日志也会打印在控制台上。
- logger.info(f"这一个info类型的日志")。logger.warning(f"这是一个warning类型的日志")。logger.error(f"这是一个error类型的日志")。
如果想只是使用一下的话,不关注原理的话,可以直接创建一个logger.py文件,然后将代码复制过去。
import logging
from logging.handlers import RotatingFileHandler
def getLogging(file: str, console: bool):
"""
获取日志对象
:param file: 日志文件落盘地址
:param console: 是否输出到控制台
:return: 日志对象
"""
# 获取logger对象
logger = logging.getLogger(__name__)
# 设置日志打印级别,例如info级别可以打印info、warning、error
logger.setLevel(level=logging.INFO)
# 日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 如果当file满足2048KB之后,就转为备份文件file.1,重新写file。当file再满的时候,file.1变为file.2,file变为file.1,再重新写file
# 这个底层其实不是真实复制文件,而只是重新命名了一下文件罢了
sizeHandler = RotatingFileHandler(file, maxBytes=1024 * 2048, 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服务器