我正在尝试在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')登录。
答案 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
更改了一些名称