WxPython(三) -- 封装日志模块输出到GUI界面

# -*- coding:utf-8 -*-

import logging
import os
import time
import wx


class TextHandler(logging.Handler):

    def __init__(self):
        logging.Handler.__init__(self)
        self.ctrl = None

    def set_ctrl(self, ctrl):
        self.ctrl = ctrl

    def emit(self, record):
        if not self.ctrl == None:
            wx.CallAfter(self.ctrl.write, self.format(record) + "\n")


class LogUtils(object):

    log = None

    @staticmethod
    def sharedInstance(task_id):
        if LogUtils.log == None:
            LogUtils.log = LogUtils(task_id)
        return LogUtils.log

    def __init__(self, task_id):

        self.logger = logging.getLogger(task_id)
        self.level = logging.INFO
        self.fm = logging.Formatter('%(asctime)s - %(filename)s - [line:%(lineno)-d] - %(levelname)s - %(message)s')

        self.text_ctrl = None
        self.text_handler = TextHandler()

    def set_logger(self, taskid, workpath, logName=''):
        # 工作目录
        logs = os.path.join(workpath, 'Logs')
        if not os.path.exists(logs):
            os.makedirs(logs)

        if logName == '':
            logName = '%s_%s' % (taskid, int(time.time()))

        logs_path = logs + '\\' + logName + ".log"

        # 文件对象
        fh = logging.FileHandler(logs_path)
        # 设置格式
        fh.setFormatter(self.fm)
        # logger添加文件输出流
        self.logger.addHandler(fh)  

        # 输出到控制台
        sh = logging.StreamHandler()
        # 设置格式
        sh.setFormatter(self.fm)
        # logger添加标准输出流
        self.logger.addHandler(sh)  

        self.logger.addHandler(self.text_handler)
        # 设置从那个等级开始提示
        self.logger.setLevel(logging.INFO)  
        self.logger.info(u'开始写入日志...\n')

    def info(self, s):
        self.logger.info(s)

    def set_ctrl_to_logging(self, text_ctrl):
        self.text_ctrl = text_ctrl
        if not self.text_handler == None:
            self.text_handler.set_ctrl(self.text_ctrl)

调用方法logger.info()

        # 日志输出模块
        self.LogSizer = wx.BoxSizer()
        self.LogText = wx.TextCtrl(self.Panel_Bottom, -1, u'', style=wx.TE_MULTILINE)
        # 设置字体风格大小
        self.font = wx.Font(10, wx.MODERN, wx.NORMAL, wx.NORMAL, False, 'Consolas')
        self.LogText.SetFont(self.font)
        self.LogSizer.Add(self.LogText, proportion=1, flag=wx.EXPAND | wx.ALL, border=15)
        self.Panel_Bottom.SetSizer(self.LogSizer)


        self.logger = LogUtils.sharedInstance('1')
        LogUtils.sharedInstance('Game').set_ctrl_to_logging(self.LogText)
        self.logger.set_logger('Game', 'LogDir',)
        

效果:
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值