Add logging.

This commit is contained in:
Schimon Jehudah, Adv. 2025-03-10 10:35:21 +02:00
parent 2103b061a2
commit 3fa7aa9b40
4 changed files with 512 additions and 93 deletions

View file

@ -15,8 +15,8 @@ import argparse
from blasta.config import Cache, Settings, Share from blasta.config import Cache, Settings, Share
from blasta.http.instance import HttpInstance from blasta.http.instance import HttpInstance
from blasta.database.sqlite import DatabaseSQLite from blasta.database.sqlite import DatabaseSQLite
from blasta.utilities.logger import UtilitiesLogger
import json import json
import logging
import os import os
from os.path import getsize, exists from os.path import getsize, exists
import shutil import shutil
@ -80,9 +80,38 @@ if __name__ == 'blasta.__main__':
usage='%(prog)s [OPTION]...') usage='%(prog)s [OPTION]...')
parser.add_argument('-v', '--version', help='print version', parser.add_argument('-v', '--version', help='print version',
action='version', version='0.1') action='version', version='0.1')
# Setup the command line arguments.
parser.add_argument('-p', '--port', help='port number', dest='port') parser.add_argument('-p', '--port', help='port number', dest='port')
parser.add_argument('-o', '--open', help='open an html browser', action='store_const', const=True, dest='open') parser.add_argument('-o', '--open', help='open an html browser', action='store_const', const=True, dest='open')
parser.add_argument('--no-log', '--nolog', help='Do not create a log file',
action='store_const', dest='nolog',
const=True, default=False)
# Output verbosity options.
parser.add_argument('-d', '--debug', help='set logging to DEBUG',
action='store_const', dest='loglevel',
const='debug', default='info')
parser.add_argument('-q', '--quiet', help='set logging to ERROR',
action='store_const', dest='loglevel',
const='error', default='info')
parser.add_argument('-w', '--warning', help='set logging to WARNING',
action='store_const', dest='loglevel',
const='warn', default='info')
args = parser.parse_args() args = parser.parse_args()
filename_log = os.path.join(directory_cache, 'blasta_log.csv')
filename_log_old = os.path.join(directory_cache, 'blasta_log.csv.old')
if os.path.exists(filename_log): os.rename(filename_log, filename_log_old)
loglevel = args.loglevel
logger = UtilitiesLogger('blasta')
if not args.nolog:
logger.set_filename(filename_log)
with open(filename_log, 'a') as file:
file.write('Time,,Level,Module,Function,JID/Path,Message\n')
logger.set_level(loglevel)
port = int(args.port or 8000) port = int(args.port or 8000)
app = main() app = main()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,75 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from datetime import datetime
import logging
class UtilitiesLogger:
def __init__(self, name):
self.logger = logging.getLogger(name)
def set_level(self, loglevel):
match loglevel:
case 'debug':
level = logging.DEBUG
case 'error':
level = logging.ERROR
case 'info':
level = logging.INFO
case 'warning':
level = logging.WARNING
case _:
level = logging.NOTSET
self.logger.setLevel(level)
console_handler = logging.StreamHandler()
console_handler.setLevel(level)
formatter = logging.Formatter('[%(asctime)s] %(levelname)s:%(name)s:%(message)s')
console_handler.setFormatter(formatter)
# Add the console handler only if there are no handlers already
if not self.logger.handlers:
self.logger.addHandler(console_handler)
def set_filename(self, filename):
file_handler = logging.FileHandler(filename)
file_handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s,%(levelname)s,%(name)s,%(message)s')
file_handler.setFormatter(formatter)
# Add the console handler only if there are no handlers already
if not self.logger.handlers:
self.logger.addHandler(file_handler)
def debug(self, message):
self.logger.debug(message)
def info(self, message):
self.logger.info(message)
def warning(self, message):
self.logger.warning(message)
def error(self, message):
self.logger.error(message)
def critical(self, message):
self.logger.critical(message)
# Example usage:
# logger = Logger('my_logger')
# logger.set_level('debug')
# logger.debug('This is a debug message.')
class Message:
def printer(text):
now = datetime.now()
current_time = now.strftime("%H:%M:%S")
# print('{} {}'.format(current_time, text), end='\r')
print('{} {}'.format(current_time, text))

View file

@ -1,13 +1,20 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from blasta.utilities.logger import UtilitiesLogger
from slixmpp import ClientXMPP from slixmpp import ClientXMPP
import sys
logger = UtilitiesLogger(__name__)
class XmppInstance(ClientXMPP): class XmppInstance(ClientXMPP):
def __init__(self, jid, password): def __init__(self, jid, password):
function_name = sys._getframe().f_code.co_name
logger.debug(f'{function_name},{jid},Start')
super().__init__(jid, password) super().__init__(jid, password)
#self.add_event_handler("connection_failed", self.on_connection_failed) self.add_event_handler("connection_failed", self.on_connection_failed)
#self.add_event_handler("failed_auth", self.on_failed_auth) self.add_event_handler("failed_auth", self.on_failed_auth)
self.add_event_handler("session_start", self.on_session_start) self.add_event_handler("session_start", self.on_session_start)
self.register_plugin('xep_0004') # XEP-0004: Data Forms self.register_plugin('xep_0004') # XEP-0004: Data Forms
self.register_plugin('xep_0030') # XEP-0030: Service Discovery self.register_plugin('xep_0030') # XEP-0030: Service Discovery
@ -17,15 +24,22 @@ class XmppInstance(ClientXMPP):
self.register_plugin('xep_0163') # XEP-0163: Personal Eventing Protocol self.register_plugin('xep_0163') # XEP-0163: Personal Eventing Protocol
self.register_plugin('xep_0223') # XEP-0223: Persistent Storage of Private Data via PubSub self.register_plugin('xep_0223') # XEP-0223: Persistent Storage of Private Data via PubSub
self.connect() self.connect()
# self.process(forever=False)
self.connection_accepted = False self.connection_accepted = False
# def on_connection_failed(self, event): def on_connection_failed(self, event):
# self.connection_accepted = False function_name = sys._getframe().f_code.co_name
logger.debug(f'{function_name},{event},Start')
self.connection_accepted = False
logger.debug(f'{function_name},{event},Finish')
# def on_failed_auth(self, event): def on_failed_auth(self, event):
# self.connection_accepted = False function_name = sys._getframe().f_code.co_name
logger.debug(f'{function_name},{event},Start')
self.connection_accepted = False
logger.debug(f'{function_name},{event},Finish')
def on_session_start(self, event): def on_session_start(self, event):
function_name = sys._getframe().f_code.co_name
logger.debug(f'{function_name},{event},Start')
self.connection_accepted = True self.connection_accepted = True
logger.debug(f'{function_name},{event},Finish')