python flask 创建多个日志文件 在不同的module中向同一个日志文件写内容

背景介绍:
首先项目中在app文件夹外建立了logs文件夹,并在logs文件夹下建立admin.log,想再建立一个日志文件用来记录平常的一些操作。

	app_root = os.path.dirname(__file__)
	project_root = os.path.dirname(app_root)
	file_handler = RotatingFileHandler(os.path.join(project_root, 'logs', 'admin.log'),maxBytes=100 * 1024 * 1024,
                                       backupCount=10, encoding='utf-8')
    file_handler.setLevel(logging.INFO)
    file_formatter = logging.Formatter('[%(asctime)s] %(levelname)s in %(module)s %(lineno)d: %(message)s')
    file_handler.setFormatter(file_formatter)
    app.logger.addHandler(file_handler)  

技术实现:
首先建立一个setup_logger函数可以用来创建logger与日志文件:

import logging
from logging.handlers import RotatingFileHandler
import os
app_root = os.path.dirname(__file__)
project_root = os.path.dirname(app_root)

def setup_logger(logger_name, log_file=os.path.join(project_root, 'logs', 'operation.log'), level=logging.INFO):
    l = logging.getLogger(logger_name)
    formatter = logging.Formatter('%(asctime)s : %(message)s')
    # fileHandler = logging.FileHandler(log_file, mode='w')
    fileHandler = RotatingFileHandler(log_file, maxBytes=100 * 1024 * 1024,
                                       backupCount=10, encoding='utf-8')
    fileHandler.setFormatter(formatter)
    streamHandler = logging.StreamHandler()
    streamHandler.setFormatter(formatter)

    l.setLevel(level)
    l.addHandler(fileHandler)
    l.addHandler(streamHandler)
    return l

然后在每一个需要的模块中创建不同的logger

from app.utils.log import setup_logger
operation_log = setup_logger('a') #这里的logger_name 一定不能够重复
operation_log.info('this is a')
from app.utils.log import setup_logger
operation_log = setup_logger('b') 
operation_log.info('this is b')
from app.utils.log import setup_logger
operation_log = setup_logger('c') 
operation_log.info('this is c')

这样就可以在不同的模块中写入同一个日志文件中了。
打印的日志总是有重复输出的原因是,建立的logger名字相同了,所以会打印多次
参考博客:
https://blog.csdn.net/sinat_42483341/article/details/102981661

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值