当我在我正在处理的应用程序中调用另一个模块后记录数据时,我似乎遇到了问题。我想帮助理解这里可能发生的事情。
为了复制这个问题,我开发了以下脚本......
#!/usr/bin/python
import sys
import logging
from oletools.olevba import VBA_Parser, VBA_Scanner
from cloghandler import ConcurrentRotatingFileHandler
# set up logger for application
dbg_h = logging.getLogger('dbg_log')
dbglog = '%s' % 'dbg.log'
dbg_rotateHandler = ConcurrentRotatingFileHandler(dbglog, "a")
dbg_h.addHandler(dbg_rotateHandler)
dbg_h.setLevel(logging.ERROR)
# read some document as a buffer
buff = sys.stdin.read()
# generate issue
dbg_h.error('Before call to module....')
vba = VBA_Parser('None', data=buff)
dbg_h.error('After call to module....')
当我运行时,我得到以下内容......
cat somedocument.doc | ./replicate.py
ERROR:dbg_log:After call to module....
由于某种原因,我上次的dbg_h记录器写入尝试是输出到控制台以及写入我的dbg.log文件?这似乎只是在调用VBA_Parser之后发生。
cat dbg.log
Before call to module....
After call to module....
任何人都知道为什么会发生这种情况?我查看了source code of olevba并没有看到任何特别突出的内容。
这可能是我应该向模块作者提出的问题吗?或者我是否在使用cloghandler我做错了什么?
答案 0 :(得分:0)
Intent call = new Intent(Intent.ACTION_DIAL);
call.setData(Uri.parse("tel:"+phone)); //String phone
startActivity(call);
代码库通过调用oletools
,logging.debug(...)
等来调用root logger。由于作者没有费心配置根记录器,因此默认行为是转储到logging.error(...)
。由于sys.stderr
在从命令行运行时默认使用控制台,因此您可以获得您所看到的内容。
您应该与sys.stderr
的作者联系,因为他们没有有效地使用日志记录系统。理想情况下,他们会使用命名记录器并将消息推送到该记录器。作为解决消息的解决方法,您可以将根记录器配置为使用处理程序。
oletools
请注意,这可能会导致重复的日志消息。