如何从多个模块进行日志记录python日志记录

时间:2019-09-15 12:57:12

标签: python python-3.x python-2.7

我正在使用RotatingFilehandler保留5个文件作为备份。但不会记录除主模块以外的所有模块的消息。

basicconfig正在运行,但只能创建一个文件。

log_check.py:

public async Task<SomeType> GetAsync()
{
    return new Type2
    {
        List = await GetListAsync().ConfigureAwait(false),
        Count = await GetCountAsync().ConfigureAwait(false),
    };
}

ll.py:

public Task<SomeType> GetAsync()
{
    var list = GetListAsync(); 
    var count = GetCountAsync();

    return new SomeType
    {
        List = await list.ConfigureAwait(false),
        Count = await count.ConfigureAwait(false),
    };
}

logChk.py:

import ll
import logChk

import logging
from logging.handlers import RotatingFileHandler

LOG_FILENAME = 'check.log'
logger = logging.getLogger(__name__)
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ %(name)s.%(funcName)s:%(lineno)d] - %(message)s")
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)


logger = logging.getLogger(__name__)

def foo():
    logger.warning("logging from d on call foo()")

if __name__ == "__main__":

    logger.info('Starting logger for...')

    logger.warning('logging from c')
    foo()
    logChk.doo()
    ll.fun()

1 个答案:

答案 0 :(得分:2)

记录器按名称分层组织。记录日志消息后,它将遍历记录器以查找处理程序,从记录消息的记录器开始,向上移动层次结构。 层次结构遵循名称,因此,由于您是按模块名称命名记录器,因此记录到模块“ xyz”的消息将首先尝试查找附加到“ xyz”,然后是“ xy”,“ x”和最后是根的处理程序。记录器“”。

因此,要记录所有消息(通常需要这样做),需要向根记录器而不是模块记录器添加处理程序。

LOG_FILENAME = 'check.log'
rootlogger = logging.getLogger() # No name here will return you the root logger
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ % (name)s.%(funcName)s:%(lineno)d] - %(message)s")
rootlogger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
rootlogger.addHandler(handler)

要管理日志记录配置,建议您不要手动设置处理程序和格式化程序,而应使用logging.config模块。