diff --git a/blasta/__main__.py b/blasta/__main__.py
index 2f1c60d..7c4f066 100644
--- a/blasta/__main__.py
+++ b/blasta/__main__.py
@@ -15,8 +15,8 @@ import argparse
 from blasta.config import Cache, Settings, Share
 from blasta.http.instance import HttpInstance
 from blasta.database.sqlite import DatabaseSQLite
+from blasta.utilities.logger import UtilitiesLogger
 import json
-import logging
 import os
 from os.path import getsize, exists
 import shutil
@@ -80,9 +80,38 @@ if __name__ == 'blasta.__main__':
         usage='%(prog)s [OPTION]...')
     parser.add_argument('-v', '--version', help='print version',
                         action='version', version='0.1')
+
+    # Setup the command line arguments.
     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('--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()
+
+    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)
 
     app = main()
diff --git a/blasta/http/instance.py b/blasta/http/instance.py
index 7fcf710..97f7f84 100644
--- a/blasta/http/instance.py
+++ b/blasta/http/instance.py
@@ -8,12 +8,12 @@ from blasta.utilities.cryptography import UtilitiesCryptography
 from blasta.utilities.data import UtilitiesData
 from blasta.utilities.date import UtilitiesDate
 from blasta.utilities.http import UtilitiesHttp
+from blasta.utilities.logger import UtilitiesLogger
 from blasta.utilities.syndication import UtilitiesSyndication
 from blasta.xmpp.form import DataForm
 from blasta.xmpp.instance import XmppInstance
 from blasta.xmpp.iq import XmppIq
 from blasta.xmpp.pubsub import XmppPubsub
-from datetime import datetime
 from fastapi import Cookie, FastAPI, File, Form, HTTPException, Request, Response, UploadFile
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.responses import FileResponse, HTMLResponse
@@ -22,10 +22,13 @@ from fastapi.templating import Jinja2Templates
 import os
 import random
 from slixmpp.stanza.iq import Iq
+import sys
 from starlette.responses import RedirectResponse
 import urllib.parse
 import xml.etree.ElementTree as ET
 
+logger = UtilitiesLogger(__name__)
+
 class HttpInstance:
 
     def __init__(self, accounts, sessions):
@@ -127,9 +130,12 @@ class HttpInstance:
         # It appears that there is a problem to set or send a "cookie" when a template is returned.
         @self.app.middleware('http')
         async def middleware_handler(request: Request, call_next):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
 
             # Handle URL query
-            if request.url.path != '/save':
+            if request_url_path != '/save':
                 param_url = request.query_params.get('url', '') or None
                 param_hash = request.query_params.get('hash', '') or None
                 if param_hash:
@@ -141,14 +147,8 @@ class HttpInstance:
             response = await call_next(request)
             jabber_id = session_key = None
 
-            infoo = {
-                'accounts' : accounts,
-                'sessions' : sessions
-            }
-            print(infoo)
-
             # Handle credentials (i.e. so called "cookies")
-            if request.url.path == '/disconnect':
+            if request_url_path == '/disconnect':
                 jid = request.cookies.get('jabber_id')
                 if jid in accounts: del accounts[jid]
                 if jid in sessions: del sessions[jid]
@@ -159,23 +159,24 @@ class HttpInstance:
                     # Access the variable from the request state
                     jabber_id = request.app.state.jabber_id
                 except Exception as e:
-                    print(request.cookies.get('jabber_id'))
-                    print(e)
+                    jabber_id = request.cookies.get('jabber_id')
+                    logger.error(f'{function_name},{jabber_id},{str(e)}')
                     pass
                 try:
                     # Access the variable from the request state
                     session_key = request.app.state.session_key
                 except Exception as e:
-                    print(request.cookies.get('session_key'))
-                    print(e)
+                    session_key = request.cookies.get('session_key')
+                    logger.error(f'{function_name},{session_key},{str(e)}')
                     pass
                 if jabber_id and session_key:
-                    print(['Establishing a sessiong for:', jabber_id, session_key])
+                    logger.info(f'{function_name},{jabber_id},Session key: {session_key}')
                     response.set_cookie(key='jabber_id', value=jabber_id)
                     response.set_cookie(key='session_key', value=session_key)
 #                    del request.app.state.jabber_id
 #                    del request.app.state.session_key
                     request.app.state.jabber_id = request.app.state.session_key = None
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
 #                response.set_cookie(key='session', value=str(jid) + '/' + str(session_key))
@@ -191,46 +192,74 @@ class HttpInstance:
 
         @self.app.exception_handler(401)
         def not_authorized_exception_handler(request: Request, exc: HTTPException):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             #jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             message = 'Not Authorized.'
             description = 'Not Authorized (401)'
+            logger.warning(f'{function_name},{request_url_path},{description}')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return result_post(request, description, message)
 
         @self.app.exception_handler(403)
         def access_denied_exception_handler(request: Request, exc: HTTPException):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             message = 'Blasta system message » Access denied.'
             description = 'Access denied (403)'
             path = 'error'
+            logger.warning(f'{function_name},{request_url_path},{description}')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return result_post(request, jabber_id, description, message, path)
 
         @self.app.exception_handler(404)
         def not_found_exception_handler(request: Request, exc: HTTPException):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             message = 'Blasta system message » Not Found.'
             description = 'Not found (404)'
             path = 'error'
+            logger.warning(f'{function_name},{request_url_path},{description}')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return result_post(request, jabber_id, description, message, path)
 
         @self.app.exception_handler(405)
         def not_allowed_exception_handler(request: Request, exc: HTTPException):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             message = 'Blasta system message » Method Not Allowed.'
             description = 'Not allowed (405)'
             path = 'error'
+            logger.warning(f'{function_name},{request_url_path},{description}')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return result_post(request, jabber_id, description, message, path)
 
         @self.app.exception_handler(500)
         def internal_error_exception_handler(request: Request, exc: HTTPException):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             message = 'Blasta system message » Internal Server Error.'
             description = 'Internal error (500)'
             path = 'error'
+            logger.warning(f'{function_name},{request_url_path},{description}')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return result_post(request, jabber_id, description, message, path)
 
         # TODO
         @self.app.get('/admin')
         def admin_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             authorized = None
             if authorized:
@@ -240,14 +269,19 @@ class HttpInstance:
                     'journal' : journal}
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
+                logger.debug(f'{function_name},{request_url_path},Finish')
                 return response
             else:
                 raise HTTPException(status_code=403, detail='Access denied')
 
         @self.app.get('/connect')
         def connect_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
+                logger.debug(f'{function_name},{jabber_id},Finish')
                 response = RedirectResponse(url='/jid/' + jabber_id)
             else:
                 template_file = 'connect.xhtml'
@@ -256,10 +290,14 @@ class HttpInstance:
                     'journal' : journal}
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
+                logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/contact')
         def contact_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'contact.xhtml'
             template_dict = {
@@ -274,6 +312,7 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/disconnect')
@@ -281,11 +320,15 @@ class HttpInstance:
                            response: Response,
                            jabber_id: str = Cookie(None),
                            session_key: str = Cookie(None)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
 #            response.set_cookie(max_age=0, value='', key='jabber_id')
 #            response.set_cookie(max_age=0, value='', key='session_key')
             response = RedirectResponse(url='/')
             response.delete_cookie('session_key')
             response.delete_cookie('jabber_id')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/favicon.ico', include_in_schema=False)
@@ -294,6 +337,9 @@ class HttpInstance:
 
         @self.app.get('/help')
         def help_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'help.xhtml'
             template_dict = {
@@ -302,10 +348,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about')
         def help_about_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'about.xhtml'
             template_dict = {
@@ -314,10 +364,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/folksonomy')
         def help_about_folksonomies_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'folksonomy.xhtml'
             template_dict = {
@@ -326,10 +380,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/ideas')
         def help_about_ideas_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             protocol = request.url.scheme
             hostname = request.url.hostname + ':' + str(request.url.port)
@@ -342,10 +400,14 @@ class HttpInstance:
                 'origin' : origin}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/philosophy')
         def help_about_philosophy_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'philosophy.xhtml'
             template_dict = {
@@ -354,10 +416,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/projects')
         def help_about_projects_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'projects.xhtml'
             template_dict = {
@@ -366,10 +432,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/software')
         def help_about_software_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'software.xhtml'
             template_dict = {
@@ -378,10 +448,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/thanks')
         def help_about_thanks_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'thanks.xhtml'
             template_dict = {
@@ -390,10 +464,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/xmpp')
         def help_about_xmpp_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'xmpp.xhtml'
             template_dict = {
@@ -402,10 +480,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/xmpp/atomsub')
         def help_about_xmpp_atomsub_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'atomsub.xhtml'
             template_dict = {
@@ -414,10 +496,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/xmpp/libervia')
         def help_about_xmpp_libervia_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'libervia.xhtml'
             template_dict = {
@@ -426,10 +512,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/xmpp/movim')
         def help_about_xmpp_movim_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'movim.xhtml'
             template_dict = {
@@ -438,11 +528,15 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/about/xmpp/pubsub')
         def help_about_xmpp_pubsub_get(request: Request):
-            date_now_iso = datetime.now().isoformat()
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
+            date_now_iso = UtilitiesDate.get_current_time_as_iso8601()
             date_now_readable = UtilitiesDate.convert_iso8601_to_readable(date_now_iso)
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'pubsub.xhtml'
@@ -454,10 +548,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/feeds')
         def help_about_feeds_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'feeds.xhtml'
             template_dict = {
@@ -466,10 +564,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/questions')
         def help_questions_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'questions.xhtml'
             template_dict = {
@@ -478,10 +580,14 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/syndication')
         def help_syndication_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             hostname = request.url.hostname + ':' + str(request.url.port)
             protocol = request.url.scheme
             origin = protocol + '://' + hostname
@@ -495,10 +601,14 @@ class HttpInstance:
                 'pubsub_jid' : jabber_id_pubsub}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/help/utilities')
         def help_utilities_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             hostname = request.url.hostname
             protocol = request.url.scheme
@@ -513,11 +623,15 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/jid', response_class=HTMLResponse)
         @self.app.post('/jid')
         async def jid_get(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             node_type = 'public'
             path = 'jid'
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
@@ -530,23 +644,33 @@ class HttpInstance:
                     message = f'XMPP system message » {reason}.'
                     description = 'IQ Error'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
                 else:
                     response = await jid_main_get(request, node_type, path, jid=jabber_id)
-                    return response
             else:
                 description = 'An XMPP account is required'
                 message = 'Blasta system message » Please connect with your XMPP account to view this directory.'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/jid/{jid}')
         @self.app.post('/jid/{jid}')
         async def jid_jid_get(request: Request, response : Response, jid):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = await jid_main_get(request, node_type='public', path='jid', jid=jid)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         async def jid_main_get(request: Request, node_type=None, path=None, jid=None):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             ask = invite = name = origin = start = ''
 #           pubsub_jid = syndicate = jid
 #           message = 'Find and share bookmarks with family and friends!'
@@ -778,13 +902,13 @@ class HttpInstance:
                     iq = await XmppPubsub.get_node_item_ids(xmpp_instance, jid, node_public_id)
                     if isinstance(iq, Iq):
                         iq_items_remote = iq['disco_items']
-    
+
                         # Cache a list of identifiers of node items to a file.
                         iq_items_remote_name = []
                         for iq_item_remote in iq_items_remote:
                             iq_item_remote_name = iq_item_remote['name']
                             iq_items_remote_name.append(iq_item_remote_name)
-    
+
                         #data_item_ids = {'iq_items' : iq_items_remote_name}
                         #filename_item_ids = 'item_ids/' + jid + '.toml'
                         #Data.save_to_toml(filename_item_ids, data_item_ids)
@@ -814,6 +938,7 @@ class HttpInstance:
                         message = f'XMPP system message » {iq}.'
                         name = jid.split('@')[0]
                         path = 'error'
+                        logger.error(f'{function_name},{request_url_path},{description}')
                         if not iq:
                             message = 'XMPP system message » Empty.'
                             description = 'An unknown error has occurred'
@@ -827,7 +952,6 @@ class HttpInstance:
                             description = 'Jabber ID does not appear to be exist'
                         elif iq == 'not-authorized':
                             description = 'You have no authorization to view ' + name + '\'s bookmarks.'
-                            
                             ask = True
                         elif iq == 'Node not found':
                             description = name + '\'s bookmarks directory appears to be empty.'
@@ -867,7 +991,9 @@ class HttpInstance:
                 description = 'An XMPP account is required'
                 message = 'Blasta system message » Please connect with your XMPP account to view this directory.'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+                return response
             #if not entries: raise HTTPException(status_code=404, detail='No entries were found')
             template_dict = {
                 'request': request,
@@ -897,34 +1023,59 @@ class HttpInstance:
                 template_file = 'browse.xhtml'
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/blasta.svg')
         def logo_get():
-            return FileResponse(directory_data_graphic_svg)
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
+            response = FileResponse(directory_data_graphic_svg)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/', response_class=HTMLResponse)
         @self.app.get('/new', response_class=HTMLResponse)
         async def root_get_new(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = await root_main_get(request, response, page_type='new')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/popular', response_class=HTMLResponse)
         async def root_get_popular(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = await root_main_get(request, response, page_type='popular')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/query', response_class=HTMLResponse)
         async def root_get_query(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = await root_main_get(request, response, page_type='query')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/recent', response_class=HTMLResponse)
         async def root_get_recent(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = await root_main_get(request, response, page_type='recent')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         async def root_main_get(request: Request, response : Response, page_type=None):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             node_id = path = syndicate = page_type
             param_filetype = request.query_params.get('filetype', '') or None
@@ -1068,6 +1219,7 @@ class HttpInstance:
                 template_file = 'browse.xhtml'
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         """
@@ -1122,12 +1274,15 @@ class HttpInstance:
                             response: Response,
                             jabber_id: str = Form(...),
                             password: str = Form(...)):
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{jabber_id},Start')
             if not UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request):
                 # Store a variable in the request's state
                 request.app.state.jabber_id = jabber_id
                 session_key = str(random.random())
                 request.app.state.session_key = session_key
                 accounts[jabber_id] = XmppInstance(jabber_id + '/blasta', password)
+                breakpoint()
                 # accounts[jabber_id].authenticated
                 # dir(accounts[jabber_id])
                 # accounts[jabber_id].failed_auth
@@ -1135,7 +1290,7 @@ class HttpInstance:
                 sessions[jabber_id] = session_key
                 # Check if the user and password are present and valid
                 # If not valid, return "Could not connect to JID"
-            
+
             # FIXME Instead of an arbitrary number (i.e. 5 seconds), write a
             # while loop with a timeout of 10 seconds.
 
@@ -1168,7 +1323,8 @@ class HttpInstance:
                     message = f'XMPP system message » {reason}.'
                     description = 'IQ Error'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
                 else:
                     iq = await XmppPubsub.get_node_item(xmpp_instance, jabber_id, node_settings_id, 'routine')
                     routine = None
@@ -1192,13 +1348,18 @@ class HttpInstance:
                 message = 'Blasta system message » Authorization has failed.'
                 description = 'Connection has failed'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.post('/message')
         async def message_post(request: Request,
                                jid: str = Form(...),
                                body: str = Form(...)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 #headline = 'This is a message from Blasta'
@@ -1208,14 +1369,21 @@ class HttpInstance:
                 message = f'Your message has been sent to {alias}.'
                 description = 'Message has been sent'
                 path = 'message'
+                logger.info(f'{function_name},{request_url_path},{description}')
             else:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-            return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+            response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/now')
         def now_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'now.xhtml'
             template_dict = {
@@ -1224,11 +1392,15 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/private', response_class=HTMLResponse)
         @self.app.post('/private')
         async def private_get(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             node_type = 'private'
             path = 'private'
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
@@ -1241,18 +1413,24 @@ class HttpInstance:
                     message = f'Blasta system message » {reason}.'
                     description = 'Directory "private" appears to be empty'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
                 else:
                     response = await jid_main_get(request, node_type, path)
-                    return response
             else:
                 description = 'An XMPP account is required'
                 message = 'Blasta system message » Please connect with your XMPP account to view this directory.'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/profile')
         async def profile_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 xmpp_instance = accounts[jabber_id]
@@ -1289,13 +1467,18 @@ class HttpInstance:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.post('/profile')
         async def profile_post(request: Request,
                                routine: str = Form(None),
                                enroll: str = Form(None)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 xmpp_instance = accounts[jabber_id]
@@ -1326,11 +1509,16 @@ class HttpInstance:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/profile/export/{node_type}/{filetype}')
         async def profile_export_get(request: Request, node_type, filetype):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 xmpp_instance = accounts[jabber_id]
@@ -1357,7 +1545,9 @@ class HttpInstance:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.post('/profile/import')
@@ -1367,6 +1557,9 @@ class HttpInstance:
                                       merge: str = Form(None),
                                       node: str = Form(...),
                                       override: str = Form(None)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 xmpp_instance = accounts[jabber_id]
@@ -1401,8 +1594,10 @@ class HttpInstance:
                             message = 'Blasta system message » Error: Unknown file type.'
                             description = 'Import error'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
-                            
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
+                            return response
+
                     # entries_node = entries[node]
 
                     #breakpoint()
@@ -1438,20 +1633,27 @@ class HttpInstance:
                     message = f'Blasta system message » Imported {counter} items.'
                     description = 'Import successful'
                     path = 'profile'
-                    return result_post(request, jabber_id, description, message, path)
+                    response = result_post(request, jabber_id, description, message, path)
                 else:
                     message = 'Blasta system message » Error: No upload file sent.'
                     description = 'Import error'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
             else:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/save')
         async def save_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 routine = None
@@ -1464,7 +1666,8 @@ class HttpInstance:
                     #if len(iq['pubsub']['items']):
                     if (isinstance(iq, Iq) and
                         url_hash == iq['pubsub']['items']['item']['id']):
-                        return RedirectResponse(url='/url/' + url_hash + '/edit')
+                        response = RedirectResponse(url='/url/' + url_hash + '/edit')
+                        return response
                 iq = await XmppPubsub.get_node_item(xmpp_instance, jabber_id, node_settings_id, 'routine')
                 if isinstance(iq, Iq):
                     payload = iq['pubsub']['items']['item']['payload']
@@ -1505,7 +1708,9 @@ class HttpInstance:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.post('/save')
@@ -1515,6 +1720,9 @@ class HttpInstance:
                             tags: str = Form(''),
                             title: str = Form(...),
                             url: str = Form(...)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 xmpp_instance = accounts[jabber_id]
@@ -1528,7 +1736,7 @@ class HttpInstance:
                         return RedirectResponse(url='/url/' + url_hash + '/edit')
                 description = 'Confirm properties of a bookmark'
                 path = 'save'
-                published = datetime.now().isoformat()
+                published = UtilitiesDate.get_current_time_as_iso8601()
                 template_file = 'edit.xhtml'
                 template_dict = {
                     'request' : request,
@@ -1546,16 +1754,21 @@ class HttpInstance:
                     'url_hash' : url_hash}
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
-                return response
             else:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/read', response_class=HTMLResponse)
         @self.app.post('/read')
         async def read_get(request: Request, response : Response):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             node_type = 'read'
             path = 'read'
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
@@ -1568,17 +1781,23 @@ class HttpInstance:
                     message = f'Blasta system message » {reason}.'
                     description = 'Directory "read" appears to be empty'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
                 else:
                     response = await jid_main_get(request, node_type, path)
-                    return response
             else:
                 description = 'An XMPP account is required'
                 message = 'Blasta system message » Please connect with your XMPP account to view this directory.'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                esponse = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         def result_post(request: Request, jabber_id: str, description: str, message: str, path: str, http_code=None):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             template_file = 'result.xhtml'
             template_dict = {
                 'description' : description,
@@ -1589,10 +1808,14 @@ class HttpInstance:
                 'request' : request}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/register')
         def register_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             template_file = 'register.xhtml'
             template_dict = {
@@ -1601,19 +1824,32 @@ class HttpInstance:
                 'journal' : journal}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/rss')
         def rss(request: Request):
-            return RedirectResponse(url='/help/syndication')
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
+            response = RedirectResponse(url='/help/syndication')
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/search')
         async def search_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = RedirectResponse(url='/search/all')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/search/all')
         async def search_all_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             description = 'Search for public bookmarks'
             form_action = '/query'
@@ -1640,10 +1876,14 @@ class HttpInstance:
                 'path' : path}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/search/jid/{jid}')
         async def search_jid_get(request: Request, jid):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             if jabber_id:
                 if jabber_id == jid:
@@ -1678,10 +1918,14 @@ class HttpInstance:
                 response.headers['Content-Type'] = 'application/xhtml+xml'
             else:
                 response = RedirectResponse(url='/search/all')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/search/url')
         async def search_url_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             description = 'Search for a bookmark'
             form_action = None # This is not relevant due to function middleware. Maybe / or /url.
@@ -1708,10 +1952,14 @@ class HttpInstance:
                 'path' : path}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/tag')
         def tag_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             tag_list = DatabaseSQLite.get_tags_500(db_file)
             message = 'Common 500 tags sorted by name and sized by commonality.'
@@ -1726,10 +1974,14 @@ class HttpInstance:
                 'tag_list' : tag_list}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/tag/{jid}')
         def tag_get_jid(request: Request, jid):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             # NOTE Consider retrieval of tags from cache file.
             #      This is relevant to private and read nodes.
@@ -1748,15 +2000,23 @@ class HttpInstance:
                 'tag_list' : tag_list}
             response = templates.TemplateResponse(template_file, template_dict)
             response.headers['Content-Type'] = 'application/xhtml+xml'
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/url')
         async def url_get(request: Request):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             response = RedirectResponse(url='/search/url')
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/url/{url_hash}')
         async def url_hash_get(request: Request, url_hash):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             node_id = f'hash:{url_hash}'
             param_hash = url_hash
@@ -1780,7 +2040,9 @@ class HttpInstance:
                             message = f'XMPP system message » Error: {iq}.'
                             description = 'The requested bookmark could not be retrieved'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
+                            logger.error(f'{function_name},{request_url_path},{description}: {iq}')
+                            response = result_post(request, jabber_id, description, message, path)
+                            return response
                     if exist:
                         # TODO Perhaps adding a paragraph with "your tags" and "who else has tagged this link"
                         #      and keep the (5 item) limit.
@@ -1809,7 +2071,8 @@ class HttpInstance:
                             message = 'Blasta system message » Error: Not found.'
                             description = 'The requested bookmark does not exist'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
                             return response
                     else:
                         entry = DatabaseSQLite.get_entry_by_url_hash(db_file, url_hash)
@@ -1845,7 +2108,8 @@ class HttpInstance:
                             message = 'Blasta system message » Error: Not found.'
                             description = 'The requested bookmark does not exist'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
                             return response
                 else:
                     entry = DatabaseSQLite.get_entry_by_url_hash(db_file, url_hash)
@@ -1876,7 +2140,9 @@ class HttpInstance:
                         message = 'Blasta system message » Error: Not found.'
                         description = 'The requested bookmark does not exist'
                         path = 'error'
-                        return result_post(request, jabber_id, description, message, path)
+                        logger.error(f'{function_name},{request_url_path},{description}')
+                        response = result_post(request, jabber_id, description, message, path)
+                        return response
                 message = f'Information for URI {entries[0]["link"]}' # entry[2]
                 if not instances: instances = 0
                 if instances > 1:
@@ -1914,7 +2180,9 @@ class HttpInstance:
                 message = 'Blasta system message » Error: MD5 message-digest algorithm.'
                 description = 'The argument for URL does not appear to be a valid MD5 Checksum'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.post('/url/{url_hash}')
@@ -1928,6 +2196,9 @@ class HttpInstance:
                                 tags_old: str = Form(''),
                                 title: str = Form(...),
                                 url: str = Form(...)):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             node_id = f'hash:{url_hash}'
             param_hash = url_hash
             syndicate = path = 'url'
@@ -1935,7 +2206,7 @@ class HttpInstance:
             if jabber_id:
                 name = jabber_id.split('@')[0]
                 instances = DatabaseSQLite.get_entry_instances_by_url_hash(db_file, url_hash)
-                timestamp = datetime.now().isoformat()
+                timestamp = UtilitiesDate.get_current_time_as_iso8601()
                 tags_new = UtilitiesData.organize_tags(tags) if tags else ''
                 entry = {'title' : title.strip(),
                          'link' : url.strip(),
@@ -1983,7 +2254,9 @@ class HttpInstance:
                     description = 'Could not save bookmark'
                     message = f'XMPP system message » {iq}.'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
+                    return response
                 #await XmppIq.send(iq, 15)
                 # Save changes to cache file
                 entries_cache_filename = os.path.join(directory_cache, 'items', jabber_id + '.toml')
@@ -2069,15 +2342,20 @@ class HttpInstance:
                     'tags' : tags_new}
                 response = templates.TemplateResponse(template_file, template_dict)
                 response.headers['Content-Type'] = 'application/xhtml+xml'
-                return response
             else:
                 message = 'Blasta system message » Error: No active session.'
                 description = 'You are not connected'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
+            return response
 
         @self.app.get('/url/{url_hash}/confirm')
         async def url_hash_confirm_get(request: Request, url_hash):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             node_id = f'hash:{url_hash}'
             param_hash = url_hash
@@ -2103,7 +2381,9 @@ class HttpInstance:
                             else:
                                 description = 'An unknown error has occurred'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
+                            return response
                     if exist:
                         # TODO Add a check: if iq_item['id'] == url_hash:
                         entries = []
@@ -2135,21 +2415,28 @@ class HttpInstance:
                         response = templates.TemplateResponse(template_file, template_dict)
                         response.headers['Content-Type'] = 'application/xhtml+xml'
                     else:
+                        logger.info(f'{function_name},{request_url_path},Redirecting to /jid/{jabber_id}')
                         response = RedirectResponse(url='/jid/' + jabber_id)
                 else:
                     message = 'Blasta system message » Error: No active session.'
                     description = 'You are not connected'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
             else:
                 message = 'Blasta system message » Error: MD5 message-digest algorithm.'
                 description = 'The argument for URL does not appear to be a valid MD5 Checksum'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/url/{url_hash}/delete')
         async def url_hash_delete_get(request: Request, url_hash):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
             node_id = f'hash:{url_hash}'
             param_hash = url_hash
@@ -2175,7 +2462,9 @@ class HttpInstance:
                             else:
                                 description = 'An unknown error has occurred'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
+                            return response
                     if exist:
                         # TODO Add a check: if iq_item['id'] == url_hash:
                         entries = []
@@ -2229,22 +2518,29 @@ class HttpInstance:
                         response = templates.TemplateResponse(template_file, template_dict)
                         response.headers['Content-Type'] = 'application/xhtml+xml'
                     else:
+                        logger.info(f'{function_name},{request_url_path},Redirecting to /jid/{jabber_id}')
                         response = RedirectResponse(url='/jid/' + jabber_id)
                 else:
                     message = 'Blasta system message » Error: No active session.'
                     description = 'You are not connected'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
             else:
                 message = 'Blasta system message » Error: MD5 message-digest algorithm.'
                 description = 'The argument for URL does not appear to be a valid MD5 Checksum'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
 
         @self.app.get('/url/{url_hash}/edit')
         @self.app.post('/url/{url_hash}/edit')
         async def url_hash_edit_get(request: Request, url_hash):
+            request_url_path = request.url.path
+            function_name = sys._getframe().f_code.co_name
+            logger.debug(f'{function_name},{request_url_path},Start')
             jabber_id = UtilitiesHttp.is_jid_matches_to_session(accounts, sessions, request)
 #           node_id = f'hash:{url_hash}'
             if len(url_hash) == 32:
@@ -2271,8 +2567,9 @@ class HttpInstance:
                             else:
                                 description = 'An unknown error has occurred'
                             path = 'error'
-                            return result_post(request, jabber_id, description, message, path)
-                        
+                            logger.error(f'{function_name},{request_url_path},{description}')
+                            response = result_post(request, jabber_id, description, message, path)
+                            return response
                     if exist:
                         path = 'edit'
                         description = 'Edit an existing bookmark'
@@ -2304,6 +2601,23 @@ class HttpInstance:
                         entry['jid'] = jabber_id
                         entry['name'] = name
                         entry['url_hash'] = url_hash
+                        template_file = 'edit.xhtml'
+                        template_dict = {
+                            'request' : request,
+                            'description' : description,
+                            'edit' : True,
+                            'jabber_id' : jabber_id,
+                            'journal' : journal,
+                            'node' : node,
+                            'path' : path,
+                            'published' : entry['published'],
+                            'summary' : entry['summary'],
+                            'tags' : ', '.join(entry['tags']),
+                            'title' : entry['title'],
+                            'url' : entry['link'],
+                            'url_hash' : url_hash}
+                        response = templates.TemplateResponse(template_file, template_dict)
+                        response.headers['Content-Type'] = 'application/xhtml+xml'
                     else:
                         message = f'XMPP system message » {iq}.'
                         if iq == 'Node not found':
@@ -2311,32 +2625,19 @@ class HttpInstance:
                         else:
                             description = 'An unknown error has occurred'
                         path = 'error'
-                        return result_post(request, jabber_id, description, message, path)
-                    template_file = 'edit.xhtml'
-                    template_dict = {
-                        'request' : request,
-                        'description' : description,
-                        'edit' : True,
-                        'jabber_id' : jabber_id,
-                        'journal' : journal,
-                        'node' : node,
-                        'path' : path,
-                        'published' : entry['published'],
-                        'summary' : entry['summary'],
-                        'tags' : ', '.join(entry['tags']),
-                        'title' : entry['title'],
-                        'url' : entry['link'],
-                        'url_hash' : url_hash}
-                    response = templates.TemplateResponse(template_file, template_dict)
-                    response.headers['Content-Type'] = 'application/xhtml+xml'
+                        logger.error(f'{function_name},{request_url_path},{description}')
+                        response = result_post(request, jabber_id, description, message, path)
                 else:
                     message = 'Blasta system message » Error: No active session.'
                     description = 'You are not connected'
                     path = 'error'
-                    return result_post(request, jabber_id, description, message, path)
+                    logger.error(f'{function_name},{request_url_path},{description}')
+                    response = result_post(request, jabber_id, description, message, path)
             else:
                 message = 'Blasta system message » Error: MD5 message-digest algorithm.'
                 description = 'The argument for URL does not appear to be a valid MD5 Checksum'
                 path = 'error'
-                return result_post(request, jabber_id, description, message, path)
+                logger.error(f'{function_name},{request_url_path},{description}')
+                response = result_post(request, jabber_id, description, message, path)
+            logger.debug(f'{function_name},{request_url_path},Finish')
             return response
diff --git a/blasta/utilities/logger.py b/blasta/utilities/logger.py
new file mode 100644
index 0000000..26007f6
--- /dev/null
+++ b/blasta/utilities/logger.py
@@ -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))
diff --git a/blasta/xmpp/instance.py b/blasta/xmpp/instance.py
index 47f7820..179026d 100644
--- a/blasta/xmpp/instance.py
+++ b/blasta/xmpp/instance.py
@@ -1,13 +1,20 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
+from blasta.utilities.logger import UtilitiesLogger
 from slixmpp import ClientXMPP
+import sys
+
+logger = UtilitiesLogger(__name__)
 
 class XmppInstance(ClientXMPP):
+
     def __init__(self, jid, password):
+        function_name = sys._getframe().f_code.co_name
+        logger.debug(f'{function_name},{jid},Start')
         super().__init__(jid, password)
-        #self.add_event_handler("connection_failed", self.on_connection_failed)
-        #self.add_event_handler("failed_auth", self.on_failed_auth)
+        self.add_event_handler("connection_failed", self.on_connection_failed)
+        self.add_event_handler("failed_auth", self.on_failed_auth)
         self.add_event_handler("session_start", self.on_session_start)
         self.register_plugin('xep_0004') # XEP-0004: Data Forms
         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_0223') # XEP-0223: Persistent Storage of Private Data via PubSub
         self.connect()
-        # self.process(forever=False)
-
         self.connection_accepted = False
 
-#    def on_connection_failed(self, event):
-#        self.connection_accepted = False
+    def on_connection_failed(self, event):
+        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):
-#        self.connection_accepted = False
+    def on_failed_auth(self, event):
+        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):
+        function_name = sys._getframe().f_code.co_name
+        logger.debug(f'{function_name},{event},Start')
         self.connection_accepted = True
+        logger.debug(f'{function_name},{event},Finish')