Python3日志记录

时间:2019-09-30 16:07:08

标签: python logging

我正在尝试在python 3.6.8中创建自己的记录器,以将输出发送到stdout和日志文件(按日期选择,如果该日志文件在今天的日期尚不存在,则按日期选择)已经是具有相同日期的文件,只需追加)。

for d in store_response:
    for key, value in d.items():
        test.setdefault(key, [])
        test[key].append(value)

在json conf文件中,这些是我加载的键

from datetime import date
import logging
import logging.handlers
class Log:
    def __init__(self):
        pass

    def getCleanerLogger(self,moduleName, logFolder, format):
        filename = logFolder+ str(date.today()) + '-log.log'
        handler = logging.FileHandler(filename)
        shandler = logging.StreamHandler()
        shandler.setLevel(logging.INFO)
        handler.setLevel(logging.DEBUG)
        formatter = logging.Formatter(format)
        handler.setFormatter(formatter)
        shandler.setFormatter(formatter)
        logger = logging.getLogger(moduleName)
        logger.addHandler(handler)
        logger.addHandler(shandler)
        print("I've been called")
        return logger

import Conf
conf = Conf.configuration()
print(conf['logFolder'] + "   " + conf['logFormat'])
logger = Log()
logger = logger.getCleanerLogger("Log", conf['logFolder'], conf['logFormat'])
logger.info('initializing')
logger.debug('initializing debug')

使用正确的逻辑创建日志文件,但控制台或日志文件中均未记录日志,仅将打印内容输出到stdout,未引发任何错误或异常,我真的不明白为什么会这样”工作。加载basiconfig后,我只能使用logging.root.level('msg')登录。

1 个答案:

答案 0 :(得分:0)

每个处理程序都有自己的日志记录级别,但是logger也具有全局日志记录级别,该日志记录级别具有更大的优先级,因此您必须将此级别更改为不会阻塞处理程序的级别-即。

logger.setLevel(logging.DEBUG)

最小的工作代码。

它不使用带有设置的文件,因此每个人都可以轻松地复制并运行它。

from datetime import date
import os
import logging
import logging.handlers

class Log:

    def get_cleaner_logger(self, module_name, log_folder, format):
        if not os.path.exists(log_folder):
            os.makedirs(log_folder)

        filename = os.path.join(log_folder, date.today().strftime('%Y-%m-%d-log.log'))
        print(filename)

        logger = logging.getLogger(module_name)
        print('before:', logger.level)
        logger.setLevel(logging.DEBUG)
        print('after:', logger.level)

        formatter = logging.Formatter(format)

        handler = logging.FileHandler(filename)
        handler.setLevel(logging.DEBUG)
        handler.setFormatter(formatter)
        logger.addHandler(handler)

        shandler = logging.StreamHandler()
        shandler.setLevel(logging.INFO)
        shandler.setFormatter(formatter)
        logger.addHandler(shandler)

        print("I've been called")

        return logger

conf = {
    "logFolder": "log/",
    "logFormat": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}

logger = Log()
logger = logger.get_cleaner_logger("Log", conf['logFolder'], conf['logFormat'])
logger.info('initializing')
logger.debug('initializing debug')

顺便说一句:我根据PEP 8 -- Style Guide for Python Code

更改了一些名称