diff --git a/Makefile b/Makefile index 43de542..121e51f 100644 --- a/Makefile +++ b/Makefile @@ -34,10 +34,10 @@ help: # make daemon run: - PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc + PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector ./etc rundev: - PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector -s ./etc.test.local + PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VERSION)/site-packages/ bin/linspector ./etc.test.local daemon: PYTHONPATH=$(shell pwd):$(shell pwd)/venv/lib/python$(PYTHON_VRESION)/site-packages/ bin/linspector -d ./etc diff --git a/bin/linspector b/bin/linspector index bca1e2a..f8944a0 100755 --- a/bin/linspector +++ b/bin/linspector @@ -17,7 +17,7 @@ from linspector.linspector import Linspector from linspector.monitors import Monitors from loguru import logger -__version__ = '0.21.1' +__version__ = '0.21.2' __author__ = 'Johannes Findeisen ' @@ -39,12 +39,6 @@ def parse_args(): parser.add_argument('-r', '--restart', default=False, dest='restart', action='store_true', help='restart the daemon if it is running (default: false)') - parser.add_argument('-s', '--stdout', default=False, dest='stdout', action='store_true', - help='log to stdout') - - parser.add_argument('-V', '--verbose', default=False, dest='verbose', action='store_true', - help='log in debug mode') - parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + str(__version__)) return parser.parse_args() diff --git a/linspector/logger.py b/linspector/logger.py deleted file mode 100644 index 428230c..0000000 --- a/linspector/logger.py +++ /dev/null @@ -1,148 +0,0 @@ -""" -This file is part of Linspector (https://linspector.org/) -Copyright (c) 2022 Johannes Findeisen . All Rights Reserved. -See LICENSE (MIT license). -""" -import logging -import os -import sys - -from logging import getLogger -from logging import handlers - -logger = getLogger('linspector') - - -# wow, this is not process capable! i thought in a last commit that the problem ist fixed, but it -# isn't!!! see here for more details: -# https://docs.python.org/3/howto/logging-cookbook.html#logging-to-a-single-file-from-multiple-processes -# i think the native pythonic way should be used as described in the link above. -# a different approach on handling this can be to use a exclusive log file for each process but -# this is not what i want. maybe these links could be helpful too: -# https://pypi.org/project/multiprocessing-logging/ -# https://stackoverflow.com/questions/641420/how-should-i-log-while-using-multiprocessing-in-python/48668567 -# or i can log to one single file using stdout data and let the operating system do the file -# rotation but if the pythonic way works fine i should implement it directly in Linspector. -# more stuff: -# https://pythondjangorestapi.com/python-logging-the-ultimate-guide-to-logging/ -# and now i found another libray for handling this, but it would make Linspector depending on the -# next 3rd party library in the core (need to discover features because i want log rotating): -# https://pypi.org/project/loguru/ -# maybe subclass it from logging.Logger...? -# TODO: Make the logging format using key=value pairs to make it easy to evaluate log data using -# Splunk. -# TODO: Make logging possible to syslog! Maybe not implement it here and just use the syslog task -# with a format optimized for Splunk or create a Splunk task for this. -class Log: - def __init__(self, configuration, stdout, verbose): - self.__configuration = configuration - self.__stdout = stdout - self.__verbose = verbose - - if stdout: - if verbose: - self.set_level(logging.DEBUG) - else: - # setting pre initialization default log level to INFO. this changes after - # initialization of the configuration. maybe there are better solutions...? - self.set_level(logging.INFO) - - # some information but not sure if useful in Linspector: - # https://stackoverflow.com/questions/919897/how-to-obtain-a-thread-id-in-python - # %(thread)d : Thread ID (if available). - # %(threadName)s : Thread name (if available). - # this works also for processName - stdout_formatter = logging.Formatter('[%(asctime)s] [%(levelname)s] [%(name)s] ' - '%(message)s') - stdout_handler = logging.StreamHandler(sys.stdout) - stdout_handler.setFormatter(stdout_formatter) - self.add_handler(stdout_handler) - - if configuration.get_option('linspector', 'log_file'): - log_file = os.path.expanduser(configuration.get_option('linspector', 'log_file')) - if not os.path.exists(os.path.dirname(log_file)): - os.makedirs(os.path.dirname(log_file)) - - log_file_formatter = \ - logging.Formatter('[%(asctime)s]:[%(levelname)s]:[%(name)s]:%(message)s') - - if configuration.get_option('linspector', 'log_file_size'): - log_file_size_mb = int(configuration.get_option('linspector', 'log_file_size')) - log_file_size_bytes = int(log_file_size_mb * 1000000) - elif configuration.get_option('linspector', 'log_file_size_bytes'): - log_file_size_bytes = int(configuration.get_option('linspector', - 'log_file_size_bytes')) - else: - # default log file size is 10000000 bytes (10MiB) - log_file_size_bytes = int(10000000) - - if configuration.get_option('linspector', 'log_file_count'): - log_file_count = int(configuration.get_option('linspector', 'log_file_count')) - else: - # default log file count is 1. - log_file_count = 1 - - log_file_handler = logging.handlers.RotatingFileHandler(log_file, - maxBytes=log_file_size_bytes, - backupCount=log_file_count) - - log_file_handler.setFormatter(log_file_formatter) - self.add_handler(log_file_handler) - - log_level = 'None' - # critical errors will always show up even when no log_level is set. this is most silent. - self.set_level(logging.CRITICAL) - if configuration.get_option('linspector', 'log_level'): - log_level = str(configuration.get_option('linspector', 'log_level')) - if log_level == "error": - self.set_level(logging.ERROR) - elif log_level == "warning": - self.set_level(logging.WARNING) - elif log_level == "info": - self.set_level(logging.INFO) - elif log_level == "debug": - self.set_level(logging.DEBUG) - # elif configuration.get_option('linspector', 'log_level') != 'error' != 'warning' \ - # != 'info' != 'debug': - # logger.warning('[linspector] log level: "' + log_level + '" not found!') - - @staticmethod - def add_handler(handler): - logger.addHandler(handler) - - @staticmethod - def critical(msg): - logger.critical(str(msg)) - - @staticmethod - def debug(msg): - # only use inspect when log level NOTSET or DEBUG is enabled. - if logger.isEnabledFor(0) or logger.isEnabledFor(10): - import inspect - import multiprocessing - import threading - # https://www.geeksforgeeks.org/how-to-get-the-process-id-from-python-multiprocess/ - current_process = multiprocessing.current_process() - from_stack = inspect.stack()[1] - function_name = from_stack.function - line_number = str(from_stack.lineno) - module_name = inspect.getmodule(from_stack[0]).__name__ - logger.debug('[' + str(current_process.name) + ']:[' + str(threading.get_ident()) + - ']:[' + str(threading.get_native_id()) + '] [' + module_name + ']:[' + - function_name + ']:[' + line_number + '] ' + str(msg)) - - @staticmethod - def error(msg): - logger.error(str(msg)) - - @staticmethod - def info(msg): - logger.info(str(msg)) - - @staticmethod - def warning(msg): - logger.warning(str(msg)) - - @staticmethod - def set_level(level): - logger.setLevel(level) diff --git a/linspector/services/vendor/avm/is_connected.py b/linspector/services/vendor/avm/is_connected.py index 4f0e820..9459c8c 100644 --- a/linspector/services/vendor/avm/is_connected.py +++ b/linspector/services/vendor/avm/is_connected.py @@ -21,7 +21,7 @@ class IsConnectedService(Service): def execute(self, identifier, monitor, service, **kwargs): self.__log.debug('identifier=' + identifier + - 'service=' + service + + ' service=' + service + ' object=' + str(self) + ' kwargs=' + str(kwargs)) try: