通过导入一个简单的函数来停止日志记录?

时间:2013-01-18 22:05:32

标签: python logging import

现在我正在尝试更大的程序,我想使用日志记录模块,而不是使用打印机来编写代码。但是我第一次跌倒了。我有一个两页的程序,添加了我能做的最简单的日志记录,但它没有用。所以,我运行了这个例子,它起作用了。然后我逐行将代码逐行扫描到示例中,直到找到阻止它的内容。对近空模块的单个简单导入会停止正确的日志记录行为。

# import ntu.dummy
import logging
LOG_FILENAME = 'example_15.log'
print 'before basicconfig'
logging.basicConfig(filename=LOG_FILENAME,level=logging.DEBUG)
print 'before log write'
logging.debug('This message should go to the log file')
print 'after log write'

使用#import ntu.dummy,程序运行,打印出调试,并将预期的.log文件与预期内容一起存入程序的文件夹。从IDLE内部或直接在OS中都是如此。

如果删除#以允许导入ntu.dummy执行,则程序运行,打印我的调试,但不会在程序的文件夹中创建.log文件,也不会在机器上的任何其他位置创建AFAICS。

C:\ Python26 \ Lib \ ntu \包含__init__.py,此文件为dummy.py,其中包含内容......

def bolleaux():
    """ empty function """
    return None

代替import ntu.dummy语句,我可以使用各种其他导入,随机,Tkinter,os.path,它们不会导致日志记录失败

帮助,请发生什么事?

1 个答案:

答案 0 :(得分:0)

卫生署!

ntu软件包包含许多其他单个函数或单个类模块,非常便于测试和更新。其中一些来自朋友,所以我不熟悉它们中的内容。由于包裹的宽度变得笨拙,他建议在__init__.py我放...

from modname import ClassName

我在那里的每个模块,然后将ClassName带入ntu命名空间。这意味着当我想使用任何模块时,我只需使用

import ntu       # instead of import ntu.modname for each module !

当然,是的,他的一个模块在类定义之前的模块级别执行logging.basicConfig。所以,即使我只导入我的模块,这样做会运行__init__,这会导入他的模块,后来使用了日志。注释掉该链中的任何链接都可以使日志记录正常工作。

我不确定在包中使用import是如此巨大的节省,它让我对这样令人讨厌的副作用持开放态度。所以我要回到从我的所有模块的packname.modname导入。

但是我想在某个时候使用那个狡猾的模块,所以必须让它更安全,或让他让它更安全。

非常感谢