提交 a8812542 编写于 作者: 编程深海AiKoder's avatar 编程深海AiKoder 🚴🏻

add log display

上级 55e0934e
#!/usr/bin/env python #!/usr/bin/env python
import wx import wx
from log_utils import LogUtils
from programmer import Programmer from programmer import Programmer
from settings import Settings from settings import Settings
...@@ -34,16 +35,32 @@ class NrfxTool(wx.Frame): ...@@ -34,16 +35,32 @@ class NrfxTool(wx.Frame):
#---------------------------------------- #----------------------------------------
# log显示区域 # log显示区域
self.log_clear_btn = wx.Button(self, label='Clear log')
self.log_clear_btn.Bind(wx.EVT_BUTTON, self.log_clear_btn_handler)
self.log_text = wx.TextCtrl(self,
style=wx.TE_MULTILINE | wx.TE_READONLY
| wx.VSCROLL)
vbox.Add(self.nb) vbox.Add(self.nb)
vbox.Add(self.log_clear_btn, flag=wx.EXPAND | wx.ALL)
vbox.Add(self.log_text, proportion=1, flag=wx.EXPAND | wx.ALL)
self.SetSizerAndFit(vbox) self.SetSizerAndFit(vbox)
self.SetSize(self.settings.size) self.SetSize(self.settings.size)
self.Centre() self.Centre()
self.Show(True) self.Show(True)
# 实例化log模块,绑定输出到log显示区域
self.logger = LogUtils.sharedInstance('1')
LogUtils.sharedInstance('nrfx_tool').set_ctrl_to_logging(self.log_text)
self.logger.set_logger('nrfx_tool', 'logs')
print(self.nb.GetSize()) print(self.nb.GetSize())
def log_clear_btn_handler(self, e):
self.log_text.Clear()
def main(): def main():
app = wx.App() app = wx.App()
......
# -*- coding:utf-8 -*-
import wx
import logging
import os
import time
from pathlib import Path
class TextHandler(logging.Handler):
def __init__(self) -> None:
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) -> None:
self.logger = logging.getLogger(task_id)
self.level = logging.INFO
self.fmt = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
self.text_ctrl = None
self.text_handler = TextHandler()
def set_logger(self, task_id, log_path, log_name=''):
'''log目录设置'''
if not os.path.exists(log_path):
os.makedirs(log_path)
if log_name == '':
log_name = '%s_%s.log' % (task_id, int(time.time()))
logs_folder = Path(log_path)
logs_path = logs_folder / log_name
print(logs_path)
# 文件句柄
fh = logging.FileHandler(logs_path)
# 设置格式
fh.setFormatter(self.fmt)
# 添加文件输出流
self.logger.addHandler(fh)
# 输出到控制台
sh = logging.StreamHandler()
# 设置格式
sh.setFormatter(self.fmt)
# 添加标准输出流
self.logger.addHandler(sh)
# 自定义log重定向
self.logger.addHandler(self.text_handler)
self.logger.setLevel(logging.INFO)
self.logger.info(u'Logging start.\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)
import wx import wx
from log_utils import LogUtils
from settings import Settings from settings import Settings
...@@ -9,6 +10,9 @@ class Programmer(wx.Panel): ...@@ -9,6 +10,9 @@ class Programmer(wx.Panel):
self._init_ui() self._init_ui()
# 实例化log模块
self.logger = LogUtils.sharedInstance('2')
def _init_ui(self): def _init_ui(self):
# 最底层水平布局vbox # 最底层水平布局vbox
self.vbox = wx.BoxSizer(wx.VERTICAL) self.vbox = wx.BoxSizer(wx.VERTICAL)
...@@ -176,9 +180,17 @@ class Programmer(wx.Panel): ...@@ -176,9 +180,17 @@ class Programmer(wx.Panel):
self.setting_sbox_sizer.Add(self.setting_gbs) self.setting_sbox_sizer.Add(self.setting_gbs)
#------------------------------------------------ #------------------------------------------------
#------------------------------------------------
# 按键绑定
self.erase_all_btn.Bind(wx.EVT_BUTTON, self._erase_all_btn_handler)
#------------------------------------------------
self.vbox.Add(self.file_sbox_sizer) self.vbox.Add(self.file_sbox_sizer)
self.vbox.Add(self.setting_sbox_sizer) self.vbox.Add(self.setting_sbox_sizer)
self.SetSizerAndFit(self.vbox) self.SetSizerAndFit(self.vbox)
print(self.file_sbox.GetSize()) print(self.file_sbox.GetSize())
print(self.setting_sbox.GetSize()) print(self.setting_sbox.GetSize())
def _erase_all_btn_handler(self, e):
self.logger.info('_erase_all_btn_handler')
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册