python + logging 记录日志
日志生成的位置为当前文件目录下的tmp 文件夹,是以固定大小(10M)的方式去滚动日志,
如想设置为按时间滚动日志,需要设置为TimedRotatingFileHandler(filename=_create_log_path(), when="MIDNIGHT", interval=1, backupCount=7)去替换RotatingFileHandler,每天晚上12点生成一个新的日志文件。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import logging
from logging.handlers import RotatingFileHandler
import os
import re
import time
class Log(object):
def __init__(self, cls_name):
self._cls_name = cls_name
def get_logger(self):
_logger = logging.getLogger(self._cls_name)
# 此处要整体设置 logger level = DEBUG,否则后面在不同的 handler 中设置 level 无效
_logger.setLevel(logging.DEBUG)
# 创建一个handler,用于写入日志文件
file_handler = RotatingFileHandler(filename=_create_log_path(), mode='a', maxBytes=10 * 1024 * 1024,
encoding='utf8', backupCount=100)
# to avoid missing date for print daily log
file_handler.suffix = "%Y-%m-%d"
file_handler.extMatch = re.compile(r"^\d{4}-\d{2}-\d{2}$")
# 设置日志输出格式
logging_format = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - [%(funcName)s] '
'- %(lineno)s - %(message)s')
file_handler.setFormatter(logging_format)
_logger.addHandler(file_handler)
# 设置控制台的日志输出
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 标准输出
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - [%(funcName)s] '
'- %(lineno)s - %(message)s')
console_handler.setFormatter(console_formatter)
_logger.addHandler(console_handler)
return _logger
def _get_current_dir():
current_dir = os.path.dirname(os.path.abspath(__file__))
# 创建一个新的文件夹
return os.path.join(current_dir, 'tmp')
def _create_log_dir(log_path: str):
"""
在此文件下生成日志文件夹
:param log_path:
:return:
"""
if not os.path.exists(log_path):
os.mkdir(log_path)
def _create_log_path():
log_dir = _get_current_dir()
_create_log_dir(log_dir)
application_name = "parse_label"
time_value = time.strftime('%Y%m%d', time.localtime(time.time()))
# #create logger name
log_file_name = application_name + "_" + time_value + '.log'
log_file_str = log_dir+"/" + log_file_name
print(log_file_str)
return log_file_str
if __name__ == '__main__':
logger = Log(__name__).get_logger()
logger.info(time.strftime('%Y-%m-%d'))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架