mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-06-02 10:38:46 +08:00
feat: add console save log
This commit is contained in:
@ -244,4 +244,12 @@ config ESPTOOLPY_ENABLE_TIME
|
|||||||
help
|
help
|
||||||
Enable this option, time string will be added at the head of serial input data line.
|
Enable this option, time string will be added at the head of serial input data line.
|
||||||
|
|
||||||
|
config ESPTOOLPY_ENABLE_SAVELOG
|
||||||
|
bool "Enable console log save"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Enable this option, all console output will auto-save to current 'log' directory which same level as the 'build` directory;
|
||||||
|
if 'log' directory is not exist, will create it.
|
||||||
|
All console output will be saved as a log filename, named PROJECT_NAME + timestamp.log, which PROJECT_NAME defined in your demo Makefile.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
@ -13,6 +13,12 @@ else
|
|||||||
ENABLE_TIME := n
|
ENABLE_TIME := n
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_ESPTOOLPY_ENABLE_SAVELOG
|
||||||
|
ENABLE_SAVELOG := y
|
||||||
|
else
|
||||||
|
ENABLE_SAVELOG := n
|
||||||
|
endif
|
||||||
|
|
||||||
CONFIG_ESPTOOLPY_COMPRESSED ?=
|
CONFIG_ESPTOOLPY_COMPRESSED ?=
|
||||||
|
|
||||||
PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
|
PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
|
||||||
@ -99,7 +105,7 @@ endif
|
|||||||
simple_monitor: $(call prereq_if_explicit,%flash)
|
simple_monitor: $(call prereq_if_explicit,%flash)
|
||||||
$(MONITOR_PYTHON) -m serial.tools.miniterm --rts 0 --dtr 0 --raw $(ESPPORT) $(MONITORBAUD)
|
$(MONITOR_PYTHON) -m serial.tools.miniterm --rts 0 --dtr 0 --raw $(ESPPORT) $(MONITORBAUD)
|
||||||
|
|
||||||
MONITOR_OPTS := --baud $(MONITORBAUD) --port $(ESPPORT) --toolchain-prefix $(CONFIG_TOOLPREFIX) --make "$(MAKE)" --enable-time $(ENABLE_TIME)
|
MONITOR_OPTS := --baud $(MONITORBAUD) --port $(ESPPORT) --toolchain-prefix $(CONFIG_TOOLPREFIX) --make "$(MAKE)" --enable-time $(ENABLE_TIME) --enable-savelog $(ENABLE_SAVELOG)
|
||||||
|
|
||||||
monitor: $(call prereq_if_explicit,%flash)
|
monitor: $(call prereq_if_explicit,%flash)
|
||||||
$(summary) MONITOR
|
$(summary) MONITOR
|
||||||
|
@ -38,6 +38,7 @@ try:
|
|||||||
except ImportError:
|
except ImportError:
|
||||||
import Queue as queue
|
import Queue as queue
|
||||||
import time
|
import time
|
||||||
|
import datetime
|
||||||
import sys
|
import sys
|
||||||
import serial
|
import serial
|
||||||
import serial.tools.miniterm as miniterm
|
import serial.tools.miniterm as miniterm
|
||||||
@ -74,6 +75,20 @@ def red_print(message):
|
|||||||
|
|
||||||
__version__ = "1.0"
|
__version__ = "1.0"
|
||||||
|
|
||||||
|
def mkdir(path):
|
||||||
|
path=path.strip()
|
||||||
|
path=path.rstrip("\\")
|
||||||
|
isExists=os.path.exists(path)
|
||||||
|
|
||||||
|
if not isExists:
|
||||||
|
os.makedirs(path)
|
||||||
|
|
||||||
|
def esp_openlog(project_name):
|
||||||
|
logdir = os.getcwd() + '/esplog'
|
||||||
|
mkdir(logdir)
|
||||||
|
filename = project_name + datetime.datetime.now().strftime('%Y%m%d%H%M%S.log')
|
||||||
|
return open(logdir + '/' + filename, 'w+')
|
||||||
|
|
||||||
# Tags for tuples in queues
|
# Tags for tuples in queues
|
||||||
TAG_KEY = 0
|
TAG_KEY = 0
|
||||||
TAG_SERIAL = 1
|
TAG_SERIAL = 1
|
||||||
@ -231,7 +246,7 @@ class Monitor(object):
|
|||||||
|
|
||||||
Main difference is that all event processing happens in the main thread, not the worker threads.
|
Main difference is that all event processing happens in the main thread, not the worker threads.
|
||||||
"""
|
"""
|
||||||
def __init__(self, serial_instance, elf_file, make="make", toolchain_prefix=DEFAULT_TOOLCHAIN_PREFIX, eol="CRLF", enable_time='n'):
|
def __init__(self, serial_instance, elf_file, make="make", toolchain_prefix=DEFAULT_TOOLCHAIN_PREFIX, eol="CRLF", enable_time='n', enable_savelog='n'):
|
||||||
super(Monitor, self).__init__()
|
super(Monitor, self).__init__()
|
||||||
self.event_queue = queue.Queue()
|
self.event_queue = queue.Queue()
|
||||||
self.console = miniterm.Console()
|
self.console = miniterm.Console()
|
||||||
@ -259,7 +274,10 @@ class Monitor(object):
|
|||||||
self.menu_key = CTRL_T
|
self.menu_key = CTRL_T
|
||||||
self.exit_key = CTRL_RBRACKET
|
self.exit_key = CTRL_RBRACKET
|
||||||
self.enable_time = enable_time
|
self.enable_time = enable_time
|
||||||
|
self.enable_savelog = enable_savelog
|
||||||
self.next_line = True
|
self.next_line = True
|
||||||
|
if self.enable_savelog == 'y':
|
||||||
|
self.log_file = esp_openlog(os.path.splitext(os.path.basename(self.elf_file))[0])
|
||||||
|
|
||||||
self.translate_eol = {
|
self.translate_eol = {
|
||||||
"CRLF": lambda c: c.replace(b"\n", b"\r\n"),
|
"CRLF": lambda c: c.replace(b"\n", b"\r\n"),
|
||||||
@ -288,6 +306,8 @@ class Monitor(object):
|
|||||||
try:
|
try:
|
||||||
self.console_reader.stop()
|
self.console_reader.stop()
|
||||||
self.serial_reader.stop()
|
self.serial_reader.stop()
|
||||||
|
if self.enable_savelog == 'y':
|
||||||
|
self.log_file.close()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
sys.stderr.write(ANSI_NORMAL + "\n")
|
sys.stderr.write(ANSI_NORMAL + "\n")
|
||||||
@ -319,7 +339,14 @@ class Monitor(object):
|
|||||||
if self.enable_time == 'y' and self.next_line == True:
|
if self.enable_time == 'y' and self.next_line == True:
|
||||||
self.console.write_bytes(get_time_stamp() + ": ")
|
self.console.write_bytes(get_time_stamp() + ": ")
|
||||||
self.next_line = False
|
self.next_line = False
|
||||||
|
if self.enable_savelog == 'y':
|
||||||
|
self.log_file.write(get_time_stamp() + ": ")
|
||||||
|
|
||||||
self.console.write_bytes(b)
|
self.console.write_bytes(b)
|
||||||
|
|
||||||
|
if self.enable_savelog == 'y':
|
||||||
|
self.log_file.write(b)
|
||||||
|
|
||||||
if b == b'\n': # end of line
|
if b == b'\n': # end of line
|
||||||
self.handle_serial_input_line(self._read_line.strip())
|
self.handle_serial_input_line(self._read_line.strip())
|
||||||
self._read_line = b""
|
self._read_line = b""
|
||||||
@ -489,7 +516,13 @@ def main():
|
|||||||
|
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--enable-time',
|
'--enable-time',
|
||||||
help='Serial port device',
|
help='enable console timestamp',
|
||||||
|
default=False
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
'--enable-savelog',
|
||||||
|
help='enable console log',
|
||||||
default=False
|
default=False
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -518,7 +551,7 @@ def main():
|
|||||||
except KeyError:
|
except KeyError:
|
||||||
pass # not running a make jobserver
|
pass # not running a make jobserver
|
||||||
|
|
||||||
monitor = Monitor(serial_instance, args.elf_file.name, args.make, args.toolchain_prefix, args.eol, args.enable_time)
|
monitor = Monitor(serial_instance, args.elf_file.name, args.make, args.toolchain_prefix, args.eol, args.enable_time, args.enable_savelog)
|
||||||
|
|
||||||
yellow_print('--- idf_monitor on {p.name} {p.baudrate} ---'.format(
|
yellow_print('--- idf_monitor on {p.name} {p.baudrate} ---'.format(
|
||||||
p=serial_instance))
|
p=serial_instance))
|
||||||
|
Reference in New Issue
Block a user