python 日志模块封装_Python logging日志模块 封装完善

import logging

import os

class Log:

'''

模块化使用

: 创建一个logger对象, 并且进行初始化设置

: 将logger对象进行返回, 方便使用

: NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

: 注意这里有个大坑, NOTSET不是显示所有消息, 而是默认的 WARNING 等级

: 想要显示所有的消息, 把等级设置为 logging.DEBUG 或者 10

: logger 和 handle的等级是谁高用谁, 比如 DEBUG和WARNING 不管谁先设置, 都是用 WARNING 等级

'''

def __init__(self, logger_name="logger"):

self.logger = logging.getLogger(logger_name) # 创建一个logger对象

self.logger.setLevel(logging.DEBUG) # NOTSET 默认是WARING

def create_handle(self, log_level=logging.DEBUG, log_file=None):

'''

: log_level 等级

: NOTSET < DEBUG < INFO < WARNING < ERROR < CRITICAL

: 0 < 10 < 20 < 30 < 40 < 50

'''

# 判断是终端输出还是文件输出

if log_file == None:

handle = logging.StreamHandler() # terminal print

else:

handle = logging.FileHandler(log_file, encoding="utf-8") # write to file

handle.setLevel(log_level) # 设置handle的等级

# 设置log输出格式

formatter = logging.Formatter("%(levelname)s - %(asctime)s - %(filename)s[line:%(lineno)d] - %(message)s",datefmt='%Y-%m-%d %a %H:%M:%S')

handle.setFormatter(formatter)

# 添加handle到logger

self.logger.addHandler(handle)

def return_logger(self):

'''

:return: 返回logger以便使用

'''

return self.logger

def create_log_file():

'''

创建一个和当前文件所在目录同级别的一个log目录

log文件: log_file.log

'''

log_dir = os.path.join(os.path.abspath("../.."), "log")

if not os.path.exists(log_dir):

os.mkdir(log_dir)

log_path = os.path.join(log_dir, "log_file.log")

return log_path

def get_logger(logger_name:str = "default_logger", log_file=None, log_file_level=logging.INFO, log_print_level=logging.DEBUG):

'''

传入logger名字, 自动创建两个handle, 一个打印输出 默认为DEBUG, 一个日志文件记录 默认为INFO

:param logger_name: string

:return: logger

'''

if log_file:

if os.path.exists(log_file):

log_path = log_file

else:

print("---Log文件地址不存在, 重新创建Log文件---")

log_path = create_log_file()

else:

print("---未给出Log文件路径, 创建Log文件---")

log_path = create_log_file()

log_obj = Log(logger_name=logger_name)

log_obj.create_handle(log_level=log_print_level)

log_obj.create_handle(log_level=log_file_level, log_file=log_path)

logger = log_obj.return_logger()

logger.warning("--- " + logger_name + " init success ---")

return logger

if __name__ == "__main__":

# 测试

# log_obj = Log(logger_name="test_log")

# log_obj.create_handle()

# logger = log_obj.return_logger()

# logger.info('test_log')

# logger.warning("warning")

get_logger()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值