use*_*168 1 python logging wxpython
如何登录文件以及wxpython txt ctrl?
背景我有基于wxpython GUI的应用程序,它枚举python测试文件并执行它们.在http://broadcoder.blogspot.com/2009/10/redirecting-python-logging-to.html的帮助下,我能够将python日志消息重定向到txtctrl.但是,我也想将日志消息重定向到日志文件.我导入我的测试文件,如下所示:
logging.info('Started')
testid = __import__(str)
reload(testid)
testOut = testid.main()
Run Code Online (Sandbox Code Playgroud)
在我的每个测试文件中,我只使用导入日志记录,我的日志消息被重定向到txt ctrl.但是,我还希望测试日志消息也可以根据文件名重定向到日志文件.如何将日志消息重定向到两者?如果我在我的测试文件中使用logging.basicConfig消息仍然仅指向文本ctrl.我在其中导入的TestGUI.py说5个python测试文件.在我的测试文件文件中,我只是在我的TestGUI.py文件中设置记录器时使用导入记录
self.logr = logging.getLogger('')
self.logr.setLevel(logging.INFO)
hdlr = WxLog(self.log)
hdlr.setFormatter(logging.Formatter('%(message)s '))
self.logr.addHandler(hdlr)
Run Code Online (Sandbox Code Playgroud)
在我的测试文件中,我做了类似这样的事情:
logger = logging.getLogger('')
fh = logging.FileHandler("log.html",mode='w')
formatter = logging.Formatter('%(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
a= 5
b= 6
logging.info('a=5')
logging.info('b=6')
c= a+b
logging.info('adding b and c')
fh.close()
Run Code Online (Sandbox Code Playgroud)
当我多次运行此测试时,我得到ValueError:关闭文件的I/O操作.
一个记录器可以有多个处理程序!所以你可以轻松实现这一目标.
例
import logging
logger = logging.getLogger('myapp')
hdlr = logging.FileHandler('var/myapp.log')
hdlr2 = logging.FileHandler('var/myapp2.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
hdlr2.setFormatter(formatter)
logger.addHandler(hdlr)
logger.addHandler(hdlr2)
logger.setLevel(logging.INFO)
logger.info('a log message')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
685 次 |
| 最近记录: |