improved logging + log to file

Logging is now set at two levels:
logging.ERROR and more important messages are shown on the console while running inkcal.
logging.DEBUG (all) messages are logged inside a log file named inkycal.log in /Inkycal/logs.

Fixed an issue with the info section not updating the time correctly.
This commit is contained in:
Ace 2020-11-29 14:56:44 +01:00
parent eb806526bd
commit 9216afbea8

View File

@ -11,6 +11,7 @@ from inkycal.custom import *
import os
import traceback
import logging
from logging.handlers import RotatingFileHandler
import arrow
import time
import json
@ -28,18 +29,36 @@ except ImportError:
'run: pip3 install numpy \nIf you are on Raspberry Pi '
'remove numpy: pip3 uninstall numpy \nThen try again.')
logging.basicConfig(
level = logging.INFO, #DEBUG > #INFO > #ERROR > #WARNING > #CRITICAL
format='%(name)s -> %(levelname)s -> %(asctime)s -> %(message)s',
datefmt='%d-%m-%Y %H:%M')
# (i): Logging shows logs above a threshold level.
# e.g. logging.DEBUG will show all from DEBUG until CRITICAL
# e.g. logging.ERROR will show from ERROR until CRITICAL
# #DEBUG > #INFO > #ERROR > #WARNING > #CRITICAL
# On the console, set a logger to show only important logs
# (level ERROR or higher)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.ERROR)
# Save all logs to a file, which contains much more detailed output
logging.basicConfig(
level = logging.DEBUG,
format='%(asctime)s | %(name)s | %(levelname)s: %(message)s',
datefmt='%d.%m.%Y %H:%M',
handlers=[
stream_handler, # add stream handler from above
RotatingFileHandler( # log to a file too
f'{top_level}/logs/inkycal.log', # file to log
maxBytes=2097152, # 2MB max filesize
backupCount=5 # create max 5 log files
)
]
)
logger = logging.getLogger('inykcal main')
# TODO: fix issue with non-render mode requiring SPI
# TODO: fix info section not updating after a calibration
# TODO: add function to add/remove third party modules
# TODO: autostart -> supervisor?
# TODO: logging to files
class Inkycal:
"""Inkycal main class
@ -129,7 +148,7 @@ class Inkycal:
# If a module was not found, print an error message
except ImportError:
print('Could not find module: "{module}". Please try to import manually')
print(f'Could not find module: "{module}". Please try to import manually')
# If something unexpected happened, show the error message
except Exception as e:
@ -236,7 +255,7 @@ class Inkycal:
errors = [] # store module numbers in here
# short info for info-section
self.info = f"{runtime.format('D MMM @ HH:mm')} "
self.info = f"{arrow.now(tz=get_system_tz()).format('D MMM @ HH:mm')} "
for number in range(1, self._module_number):
@ -257,6 +276,7 @@ class Inkycal:
print('Error!')
print(traceback.format_exc())
self.info += f"module {number}: Error! "
logging.error(f'Exception in module {number}:', exc_info=True)
if errors:
print('Error/s in modules:',*errors)
@ -657,4 +677,4 @@ class Inkycal:
print(f"Your module '{filename}' with class '{classname}' was removed.")
if __name__ == '__main__':
print('running {0} in standalone/debug mode'.format('inkycal main'))
print(f'running inkycal main in standalone/debug mode')