Index: dialin/protocols/CAN.py =================================================================== diff -u -ra3f3f5ca6fcb24a47bb3056878bb8ff9e3642fd2 -re10534f3df259e137e0ba14d897ecef42a767737 --- dialin/protocols/CAN.py (.../CAN.py) (revision a3f3f5ca6fcb24a47bb3056878bb8ff9e3642fd2) +++ dialin/protocols/CAN.py (.../CAN.py) (revision e10534f3df259e137e0ba14d897ecef42a767737) @@ -416,7 +416,10 @@ # We have received a legit can message of 8 bytes can_data = [b for b in message.data] channel_id = message.arbitration_id - message_length = can_data[DenaliMessage.PAYLOAD_LENGTH_INDEX] + if not DenaliMessage.PAYLOAD_LENGTH_INDEX < len(can_data): + self.logger.error("Invalid denali message received: {0}".format(message)) + else: + message_length = can_data[DenaliMessage.PAYLOAD_LENGTH_INDEX] if self.log_can: self.do_log_can(message, style="candump", channel=self.bus.channel, send=False) Index: dialin/utils/base.py =================================================================== diff -u -r149731110e78bdf58e6b5872b545a79dfbee1fb1 -re10534f3df259e137e0ba14d897ecef42a767737 --- dialin/utils/base.py (.../base.py) (revision 149731110e78bdf58e6b5872b545a79dfbee1fb1) +++ dialin/utils/base.py (.../base.py) (revision e10534f3df259e137e0ba14d897ecef42a767737) @@ -179,7 +179,10 @@ print("Warning: Could not set txtqueue length: {0}".format(cmd_txqueue)) -def create_logger(log_path: str = "/tmp/DialinScript.log", level: str = "ERROR", enable_metadata=True): +def create_logger(log_path: str = "/tmp/DialinScript.log", + level: str = "ERROR", + enable_metadata=True, + clear_before_write=False): """ Convenience function to create a logger for external Dialin scripts @@ -191,10 +194,18 @@ numeric_level = getattr(logging, level, logging.ERROR) - logger = logging.getLogger("DialinScript") + current_time = datetime.now() + + # create a new unique logger using current date and time + logger = logging.getLogger("DialinScript{0}{1}{2}".format(current_time.hour, + current_time.minute, + current_time.second)) logger.setLevel(numeric_level) - fh = logging.FileHandler(log_path) + if clear_before_write: + fh = logging.FileHandler(log_path, mode='w') + else: + fh = logging.FileHandler(log_path) fh.setLevel(numeric_level) ch = logging.StreamHandler() ch.setLevel(numeric_level) Index: tests/test_logging.py =================================================================== diff -u -r8ea13ae6dd10732bfcc456798f4785c4d88c95d3 -re10534f3df259e137e0ba14d897ecef42a767737 --- tests/test_logging.py (.../test_logging.py) (revision 8ea13ae6dd10732bfcc456798f4785c4d88c95d3) +++ tests/test_logging.py (.../test_logging.py) (revision e10534f3df259e137e0ba14d897ecef42a767737) @@ -14,12 +14,15 @@ # ############################################################################ import sys +import subprocess sys.path.append("..") from dialin.dg.dialysate_generator import DG from dialin.hd.hemodialysis_device import HD +from dialin.utils.base import create_logger import time +import logging +from logging import Logger - def test_logging(): """ Prints the DG version. @@ -40,5 +43,24 @@ hd.ui.cmd_ui_request_hd_version() +class HDDevice(HD): + def __init__(self): + super().__init__() + self.vvlogger = create_logger("vvlogger.log", "NOT_SET", enable_metadata=False, clear_before_write=True) + self.vvlogger.debug("VVLOGGER: INITIALIZE") + self.logger.debug("TESTING123") + self.vvlogger.getEffectiveLevel() + + +def test_create_logger(): + subprocess.call("rm *.log", shell=True) + hd = HDDevice() + print(hd.vvlogger.getEffectiveLevel()) + hd.vvlogger.debug("VVLOGGER: TEST 1 (BEFORE DIALIN logger.debug() calls)") + hd.test_debug() + hd.vvlogger.debug("VVLOGGER: TEST 2 (AFTER DIALIN logger.debug() calls)") + # observe that no dialin logger.debug() messages appear in vvlogger.log + # and no dialin logger.debug() messages appear in the pycharm console (same behavior when running from terminal). + if __name__ == '__main__': - test_logging() + test_create_logger()