Added thread locking to log output. Various housekeeping.

This commit is contained in:
Mark Qvist 2021-05-03 20:24:44 +02:00
parent 178c69e361
commit 54206d9101
4 changed files with 31 additions and 14 deletions

View File

@ -73,7 +73,7 @@ if __name__ == "__main__":
try: try:
parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts") parser = argparse.ArgumentParser(description="Reticulum example that demonstrates sending and receiving unencrypted broadcasts")
parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str) parser.add_argument("--config", action="store", default=None, help="path to alternative Reticulum config directory", type=str)
parser.add_argument("--channel", action="store", default=None, help="path to alternative Reticulum config directory", type=str) parser.add_argument("--channel", action="store", default=None, help="broadcast channel name", type=str)
args = parser.parse_args() args = parser.parse_args()
if args.config: if args.config:

View File

@ -188,7 +188,7 @@ class Identity:
except Exception as e: except Exception as e:
RNS.log("Failed to load identity key", RNS.LOG_ERROR) RNS.log("Failed to load identity key", RNS.LOG_ERROR)
RNS.log("The contained exception was: "+str(e)) RNS.log("The contained exception was: "+str(e), RNS.LOG_ERROR)
return False return False
def loadPublicKey(self, key): def loadPublicKey(self, key):

View File

@ -3,6 +3,7 @@ import sys
import glob import glob
import time import time
import random import random
import threading
from .Reticulum import Reticulum from .Reticulum import Reticulum
from .Identity import Identity from .Identity import Identity
@ -35,6 +36,10 @@ logtimefmt = "%Y-%m-%d %H:%M:%S"
random.seed(os.urandom(10)) random.seed(os.urandom(10))
_always_override_destination = False
logging_lock = threading.Lock()
def loglevelname(level): def loglevelname(level):
if (level == LOG_CRITICAL): if (level == LOG_CRITICAL):
return "Critical" return "Critical"
@ -55,19 +60,31 @@ def loglevelname(level):
return "Unknown" return "Unknown"
def log(msg, level=3): def log(msg, level=3, _override_destination = False):
# TODO: not thread safe global _always_override_destination
if loglevel >= level: if loglevel >= level:
timestamp = time.time() timestamp = time.time()
logstring = "["+time.strftime(logtimefmt)+"] ["+loglevelname(level)+"] "+msg logstring = "["+time.strftime(logtimefmt)+"] ["+loglevelname(level)+"] "+msg
logging_lock.acquire()
if (logdest == LOG_STDOUT): if (logdest == LOG_STDOUT or _always_override_destination):
print(logstring) print(logstring)
logging_lock.release()
if (logdest == LOG_FILE and logfile != None): elif (logdest == LOG_FILE and logfile != None):
try:
file = open(logfile, "a") file = open(logfile, "a")
file.write(logstring+"\n") file.write(logstring+"\n")
file.close() file.close()
logging_lock.release()
except Exception as e:
logging_lock.release()
_always_override_destination = True
log("Exception occurred while writing log message to log file: "+str(e), LOG_CRITICAL)
log("Dumping future log events to console!", LOG_CRITICAL)
log(msg, level)
def rand(): def rand():
result = random.random() result = random.random()