如何通过日志模块通过不同的文件实现相同的自定义日志

问题描述 投票:0回答:1

我相信从其他问题中我已经读到日志记录具有单例模式,但我没有成功地正确实施它。

我有一个像这样的

logger.py
文件:

import logging
import os
from concurrent_log_handler import ConcurrentRotatingFileHandler


def create_file_handler(path, filename=None):
    if filename is None:
        filename = f"app_{os.getlogin()}"
    formatter = logging.Formatter('%(asctime)s |  %(name)s | %(funcName)s | %(levelname)s | %(message)s')
    file_handler = ConcurrentRotatingFileHandler(fr'{path}\{filename}.log', mode='a', maxBytes=1024*1024*10, # 10 Mo per file
                                 backupCount=10)
    file_handler.setLevel(logging.INFO)
    file_handler.setFormatter(formatter)
    return file_handler

假设我有两个其他文件,

file_one.py
(我将首先调用的文件)使用
file_two.py
.

中的函数来简化

我想要一个来自

file_one.py
的自定义日志文件,所以我在其中创建了这样的日志:

import logging
from logger import create_file_handler

file_handler = create_file_handler(r'C:\custom\path', filename="custom_filename")
le_log = logging.getLogger(__name__)
le_log.setLevel(logging.INFO)

le_log.addHandler(file_handler)

问题是在

file_two.py
我不能把自定义路径也不能把custom_file_name放在
create_file_handler
的参数中,因为我事先不知道哪个文件(不仅有
file_one.py
)会调用函数
file_two.py
。 那么在使用
le_log
中的函数时,如何使用
file_one.py
中的自定义
file_two.py
呢?

目前我在

file_two.py
中创建默认记录器,因为我需要文件中的
le_log
变量。

python python-3.x logging singleton python-logging
1个回答
0
投票

我不知道这是不是最好的做法,但我终于成功了。 在

file_one.py
我放:

import logging
from logs.logger import create_file_handler

file_handler = create_file_handler(r'C:\custom\path', filename="custom_filename")
logging.basicConfig(handlers=[file_handler])
le_log = logging.getLogger(__name__)
le_log.setLevel(logging.INFO)

我在

.basicConfig()
logging
方法中使用了自定义处理程序,而不是用
le_log
添加到
.addHandler()
。我想它允许
logging
类通过
file_one.py
中调用的其他文件传播。然后在
file_two.py
我放:

import logging
le_log = logging.getLogger(__name__)
le_log.setLevel(logging.INFO)
© www.soinside.com 2019 - 2024. All rights reserved.