Python3测井

2024-05-08 03:41:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试在python3.6.8中创建自己的记录器,以将输出发送到stdout和日志文件(按日期选择,如果日志文件在创建的今天还不存在,如果已经有一个具有相同日期的文件,只需附加)

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')

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

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

日志文件是用正确的逻辑创建的,但是控制台和日志文件中都没有日志记录,只有打印到stdout,没有出现错误或异常,我真的不明白为什么这样做不起作用。加载basiconfig后,我只能使用logging.root.level('msg')登录


Tags: 文件importlogdateformatterloggingconfdef
1条回答
网友
1楼 · 发布于 2024-05-08 03:41:42

每个处理程序都有自己的日志记录级别,但是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更改了一些名称

相关问题 更多 >