Python记录程序运行时日志信息库logging的使用
安装logging
使用国内镜像源安装logging
- pip install logging -i https://mirrors.aliyun.com/pypi/simple
logging说明
- logging模块用于记录程序运行时日志信息,核心组件包括Logger(日志器)、Handler(处理器)、Formatter(格式器)、Filter(过滤器)
一、日志级别(level)
- 低到高为DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、CRITICAL(严重错误)
- 设置level=logging.DEBUG时,会记录所有级别;
- 若设为level=logging.WARNING,只记录WARNING及以上级别(默认级别)
二、日志格式(format)
- 通过format参数自定义,常用占位符:
- %(asctime)s :日志记录时间
- %(levelname)s:日志级别(大写)
- %(message)s :日志内容
- %(filename)s :文件名
- %(lineno)d :行号
三、日志处理器(Handlers)
- 日志记录信息可以输出到不同地方,如控制台、文件、远程服务器等。常见的处理器包括:
- Logger: 记录器,应用程序直接使用的接口
- StreamHandler:输出到控制台
- FileHandler:输出到文件
- RotatingFileHandler:支持日志文件滚动。
四、输出到控制台和文件(不同级别和格式)
import logging
from logging.handlers import RotatingFileHandler
# 同时输出日志到控制台和文件 - 不同级别和格式
def logger_diff_levels_format():
logger = logging.getLogger('xLogerA') # 创建日志器
logger.setLevel(logging.DEBUG) # 设置总日志级别
# 控制台处理器
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.INFO) # 日志级别
strFormatter = logging.Formatter('%(asctime)s - %(levelname)-8s : %(message)s') # 日志格式
streamHandler.setFormatter(strFormatter) # 设置日志格式
logger.addHandler(streamHandler) # 添加到日志器
# 文件处理器
fileHandler = logging.FileHandler('xLoger.log', mode='a', encoding='utf-8')
fileHandler.setLevel(logging.DEBUG)
filFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)-8s - %(filename)s - %(funcName)s - %(lineno)d: %(message)s')
fileHandler.setFormatter(filFormatter)
logger.addHandler(fileHandler)
logger.info('Hello, xLogger......1')
logger.debug('Hello, xLogger......2')
logger.warning('Hello, xLogger......3')
logger.error('Hello, xLogger......4')
logger.critical('Hello, xLogger......5')

五、输出到控制台和文件(相同级别和格式)
import logging
from logging.handlers import RotatingFileHandler
# 同时输出日志到控制台和文件
def logger_same_levels_format():
logger = logging.getLogger('xLogerB')
logging.basicConfig(
level = logging.DEBUG, # 日志级别
format = '%(asctime)s - %(name)s - %(levelname)-8s : %(message)s', # 日志格式
# datefmt = '%Y-%m-%d %H:%M:%S', # 时间格式
handlers = \
[
logging.FileHandler('xTest.log', mode='a', encoding='utf-8'), # 文件处理器
logging.StreamHandler() #控制台处理器
], # 日志处理器
)
logger.info('Hello, xLogger1')
logger.debug('Hello, xLogger2')
logger.warning('Hello, xLogger3')
logger.error('Hello, xLogger4')
logger.critical('Hello, xLogger5')

六、日志文件按大小轮转
import logging
from logging.handlers import RotatingFileHandler
# 日志文件按大小轮转(防止文件过大)
def logger_files_rotated():
logger = logging.getLogger('xLogerA') # 创建日志器
logger.setLevel(logging.DEBUG) # 设置总日志级别
# 控制台处理器
streamHandler = logging.StreamHandler()
streamHandler.setLevel(logging.INFO) # 日志级别
strFormatter = logging.Formatter('%(asctime)s - %(levelname)-8s : %(message)s') # 日志格式
streamHandler.setFormatter(strFormatter) # 设置日志格式
logger.addHandler(streamHandler) # 添加到日志器
# 文件处理器
file_rotate_handler = RotatingFileHandler( "file_rotate.log",
maxBytes=5 * 1024, # 5KB
backupCount=20, #保留旧日志文件
encoding="utf-8")
file_rotate_handler.setLevel(logging.DEBUG) # 日志级别
filFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)-8s - %(filename)s - %(funcName)s - %(lineno)d: %(message)s') # 日志格式
file_rotate_handler.setFormatter(filFormatter) # 设置日志格式
logger.addHandler(file_rotate_handler) # 添加到日志器
# 触发轮转
for i in range(100):
logger.info(f'Hello, xLogger1 count......{i}')
logger.debug(f'Hello, xLogger2 count......{i}')
logger.warning(f'Hello, xLogger3 count......{i}')
logger.error(f'Hello, xLogger4 count......{i}')
logger.critical(f'Hello, xLogger5 count......{i}')

七、简便写法
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(
level = logging.DEBUG, # 日志级别
format = '%(asctime)s - %(levelname)s : %(message)s', # 日志格式 %(funcName)s - 函数名
handlers = \
[
logging.FileHandler('log_data.log', encoding='utf-8'),
logging.StreamHandler()
]
)
logger = logging.getLogger(__name__) # 创建日志记录器
logger.info('Hello xLogger1')
logger.debug('Hello, xLogger2')
logger.warning('Hello, xLogger3')
logger.error('Hello, xLogger4')
logger.critical('Hello, xLogger5')

17万+

被折叠的 条评论
为什么被折叠?



