【发布时间】:2013-05-31 09:45:32
【问题描述】:
在一个旧的 Zope 模块中,我在 _init_py 中找到了一个函数 add_file_logging()。
使用 logger2 我尝试记录一些 INFOS,在 add_file_logging() 中将级别设置为 DEBUG。但是 INFOS 没有记录到文件中。错误记录到文件中。但是函数 add_file_logging() 必须在记录错误时执行。但是日志级别一定是问题所在,它没有设置。
使用 logger1 我做了同样的事情 - 相同的代码 - 使用类本身中的函数 set_logger() 它工作正常。
所以我想知道,为什么相同的方法在导入时不起作用。有人可以解释一下区别吗?
那就太好了;-)
myhelper.tools/src/myhelper/tools/worker.py
import os
import sys
import logging
import logging.handlers
from myhelper.tools import add_file_logging
logger1 = logging.getLogger('myLogger1')
logger2 = logging.getLogger('myLogger2')
class Worker(object):
def __init__(self):
self.to_delete = False
...
def set_logger (self, logger, logfile):
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(logfile)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
def run(self):
self.set_logger(logger1, os.path.dirname(__file__) + "logger1.log")
add_file_logging(logger2, os.path.dirname(__file__) + "logger2.log")
...
def main():
work = XmlWorker()
work.run()
myhelper.tools/src/myhelper/tools/init.py
init.py 下划线会自动删除到 init.py ;-)
# -*- coding: utf-8 -*-
import logging
import logging.handlers
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%a, %d %b %Y %H:%M:%S')
class AboveInfoFilter(logging.Filter):
def filter(self, record):
return record.levelno > 20
def add_file_logging (logger, logfile):
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(logfile)
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
【问题讨论】:
-
你确定
AboveInfoFilter没有被应用吗?我想这只是你myhelper/tools/__init__.py的一部分。 -
是的,我从 add_file_loggin() 中删除了它的集成。之前有一行 logfileHndl.addFilter(AboveInfoFilter())
标签: python logging error-logging