diff --git a/src/octoprint/plugins/virtual_printer/__init__.py b/src/octoprint/plugins/virtual_printer/__init__.py index e3173ff4..ab66badd 100644 --- a/src/octoprint/plugins/virtual_printer/__init__.py +++ b/src/octoprint/plugins/virtual_printer/__init__.py @@ -16,8 +16,15 @@ class VirtualPrinterPlugin(octoprint.plugin.SettingsPlugin): if not self._settings.global_get_boolean(["devel", "virtualPrinter", "enabled"]): return None + import logging + import logging.handlers + + seriallog_handler = logging.handlers.RotatingFileHandler(self._settings.get_plugin_logfile_path(postfix="serial"), maxBytes=2*1024*1024) + seriallog_handler.setFormatter(logging.Formatter("%(asctime)s %(message)s")) + seriallog_handler.setLevel(logging.DEBUG) + from . import virtual - serial_obj = virtual.VirtualPrinter(read_timeout=float(read_timeout)) + serial_obj = virtual.VirtualPrinter(seriallog_handler=seriallog_handler, read_timeout=float(read_timeout)) return serial_obj __plugin_name__ = "Virtual Printer" diff --git a/src/octoprint/plugins/virtual_printer/virtual.py b/src/octoprint/plugins/virtual_printer/virtual.py index 490d2a61..7044ccdf 100644 --- a/src/octoprint/plugins/virtual_printer/virtual.py +++ b/src/octoprint/plugins/virtual_printer/virtual.py @@ -16,17 +16,28 @@ from serial import SerialTimeoutException from octoprint.settings import settings from octoprint.plugin import plugin_manager -class VirtualPrinter(): +class VirtualPrinter(object): command_regex = re.compile("[GM]\d+") sleep_regex = re.compile("sleep (\d+)") sleep_after_regex = re.compile("sleep_after ([GM]\d+) (\d+)") sleep_after_next_regex = re.compile("sleep_after_next ([GM]\d+) (\d+)") custom_action_regex = re.compile("action_custom ([a-zA-Z0-9_]+)(\s+.*)?") - def __init__(self, read_timeout=5.0, write_timeout=10.0): + def __init__(self, seriallog_handler=None, read_timeout=5.0, write_timeout=10.0): import logging self._logger = logging.getLogger("octoprint.plugin.virtual_printer.VirtualPrinter") + self._seriallog = logging.getLogger("octoprint.plugin.virtual_printer.VirtualPrinter.serial") + self._seriallog.setLevel(logging.CRITICAL) + self._seriallog.propagate = False + + if seriallog_handler is not None: + import logging.handlers + self._seriallog.addHandler(seriallog_handler) + self._seriallog.setLevel(logging.INFO) + + self._seriallog.info("-"*78) + self._read_timeout = read_timeout self._write_timeout = write_timeout @@ -664,6 +675,7 @@ class VirtualPrinter(): return try: self.incoming.put(data, timeout=self._write_timeout) + self._seriallog.info("<<< {}".format(data.strip())) except Queue.Full: self._logger.info("Incoming queue is full, raising SerialTimeoutException") raise SerialTimeoutException() @@ -675,6 +687,7 @@ class VirtualPrinter(): try: line = self.outgoing.get(timeout=self._read_timeout) time.sleep(settings().getFloat(["devel", "virtualPrinter", "throttle"])) + self._seriallog.info(">>> {}".format(line.strip())) return line except Queue.Empty: return ""