免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1814 | 回复: 0
打印 上一主题 下一主题

将log同时写入文件和显示到UI的控件中 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-11 20:49 |只看该作者 |倒序浏览
特点:

1) 此GlobalLogging 采用了singlten模式,全局唯一,必须通过getInstance方法来获得GlobalLogging的实例;


2) 此GlobalLogging可以采用logging提供的log handlers(例如log到console,file。。。),同时支持提供自定义函数来处理log的接口,可以自己定义如何处理log;





GlobalLogging的使用如下: (将系统的所有的函数的log,同时写到log文件和UI中的text控件中)

  1. from GlobalLogging import GlobalLogging

  2. class A:
  3.   def __init__(self):
  4.     GlobalLogging.getInstance().setLoggingToHanlder(self.getLog)
  5.     GlobalLogging.getInstance().setLoggingToFile('logfile.txt')
  6.     GlobalLogging.getInstance().setLoggingLevel(logging.INFO)

  7.   def getLog(self, s):
  8.     self.outputText.append(s)

  9.   def FA(self):   
  10.     GlobalLogging.getInstance().info('XXX')
  11.     GlobalLogging.getInstance().error('XXX')  
复制代码
GlobalLogging代码:

  1. import logging

  2. class NullHandler(logging.Handler):
  3.   def emit(self, record): pass

  4. class GlobalLogging:

  5.   log = None
  6.   
  7.   @staticmethod
  8.   def getInstance():
  9.     if GlobalLogging.log == None:
  10.       GlobalLogging.log = GlobalLogging()
  11.     return GlobalLogging.log

  12.   def __init__(self):
  13.     self.logger = None
  14.     self.handler = None
  15.     self.level = logging.INFO
  16.     self.logger = logging.getLogger("GlobalLogging")
  17.     self.formatter = logging.Formatter("%(levelname)s - %(message)s")
  18.     h = NullHandler()
  19.     self.logger.addHandler(h)

  20. def setLoggingToFile(self,file):     
  21. fh = logging.FileHandler(file)
  22.       fh.setFormatter(self.formatter)
  23.       self.logger.addHandler(ch)
  24.       
  25.   def setLoggingToConsole(self) :
  26.       ch = logging.StreamHandler()
  27.       ch.setFormatter(self.formatter)
  28.       self.logger.addHandler(fh)
  29.       
  30.   def setLoggingToHanlder(self,handler):
  31.       self.handler = handler
  32.       
  33.   def setLoggingLevel(self,level):
  34.     self.level = level
  35.     self.logger.setLevel(level)
  36.    
  37.   def debug(self,s):
  38.       self.logger.debug(s)
  39.       if not self.handler == None and self.level <= logging.DEBUG :
  40.         print logging.DEBUG
  41.         print self.level
  42.         self.handler('debug:' + s)
  43.   def info(self,s):
  44.       self.logger.info(s)
  45.       if not self.handler == None and self.level <= logging.INFO:
  46.         self.handler('info:' + s)
  47.   def warn(self,s):
  48.       self.logger.warn(s)
  49.       if not self.handler == None and self.level <= logging.WARNING:
  50.         self.handler('warn:' + s)
  51.   def error(self,s):
  52.       self.logger.error(s)
  53.       if not self.handler == None and self.level <= logging.ERROR:
  54.         self.handler('error:' + s)
  55.   def critical(self,s):
  56.       self.logger.critical(s)
  57.       if not self.handler == None and self.level <= logging.CRITICAL:
  58.         self.handler('critical:' + s)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP