logging模块的简单使用
代码:使用范例
- 注意:需保证有
logs
文件夹,用于存放日志文件。
# encoding: utf-8
# 创建logger
import logging.handlers
import os
from time import sleep
def create_logger(logger_name, rotate_type="FILE"):
logger = logging.getLogger(logger_name)
logger.setLevel(logging.INFO)
# 创建handler,用于写入文件
BASE_DIR = os.path.abspath(os.path.dirname(__file__))
BASE_DIR = os.path.join(BASE_DIR, "logs")
LOGS_DIR = os.path.join(BASE_DIR, "{}.log".format(logger_name))
if rotate_type == "TIME":
# 按时间分割日志(天)
file_handler = logging.handlers.TimedRotatingFileHandler(LOGS_DIR, 'D', 1)
else:
# 按文件分割日志(保留3个备份,每个1024*8个字节)
file_handler = logging.handlers.RotatingFileHandler(LOGS_DIR, mode='a', maxBytes=1024*8, backupCount=3)
file_handler.setLevel(logging.INFO) # 日志等级:INFO
# 创建handler,用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # 日志等级:INFO
# 定义handler输出格式
formatter = logging.Formatter('%(asctime)-15s %(threadName)-10s %(filename)30s[line:%(lineno)3d] %(levelname)s %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
logger = create_logger("task")
# # 测试日志分割模式
# flag = 0
# while True:
# sleep(0.1)
# flag += 1
# logger.warning("row: {}".format(flag))
参数详解
RotatingFileHandler
Class logging.handlers.RotatingFileHandler(filename,mode ='a',maxBytes = 0,backupCount = 0,encoding = None,delay = False )
以文件分割(迭代)日志,当一个日志文件写满,则往新文件写入。
- maxBytes:文件最大字节数
- backupCount:保留旧文件个数
- 注意:只有以上两个参数其中之一为0,日志文件将不会分割(迭代)。
示例
- 代码:
logging.handlers.RotatingFileHandler(LOGS_DIR, mode='a', maxBytes=1024*8, backupCount=3)
- 结果:
TimedRotatingFileHandler
Class logging.handlers.TimedRotatingFileHandler(filename,when ='h',interval = 1,backupCount = 0,encoding = None,delay = False,utc = False,atTime = None )
以指定时间来分割(迭代)日志,每个日志文件保存指定时间范围的日志记录。日志文件分割(迭代)是根据when和 interval的乘积。
- when:间隔类型
- 基于工作日的分割(迭代)时,将无视interval参数。
- 基于工作日的分割(迭代)时,将无视interval参数。
- interval:间隔格式
- backupCount:最多将保留指定数量的文件
示例
- 代码:
logging.handlers.TimedRotatingFileHandler(LOGS_DIR, 'D', 1)
- 结果:
使用配置文件
参考
- 官方文档(RotatingFileHandler 与 TimedRotatingFileHandler):Logging handlers