80 lines
2.7 KiB
Python
80 lines
2.7 KiB
Python
# (c) Copyright Leonardo S.p.A. and Leonardo MW Ltd. All rights reserved.
|
|
# Any right of industrial and intellectual property on this document,
|
|
# and of technical Know-how herein contained, belongs to
|
|
# Leonardo S.p.a. and Leonardo MW Ltd.and/or third parties.
|
|
# According to the law, it is forbidden to disclose, reproduce or however
|
|
# use this document and any data herein contained for any use without
|
|
# previous written authorization by Leonardo S.p.a. and Leonardo MW Ltd.
|
|
|
|
import logging
|
|
from pathlib import Path
|
|
from logging import config
|
|
from datetime import datetime
|
|
|
|
|
|
BASE_DIR = Path(__file__).parent.parent.resolve()
|
|
LOG_DIR = BASE_DIR.joinpath('LOG')
|
|
|
|
|
|
# Logger configuration dictionary
|
|
LOGGING_CONFIG = {
|
|
'version': 1,
|
|
'loggers': {
|
|
'': { # root logger
|
|
'level': 'DEBUG',
|
|
'propagate': False,
|
|
'handlers': ['console_handler', 'file_handler'],
|
|
},
|
|
},
|
|
'handlers': {
|
|
'console_handler': {
|
|
'level': 'INFO',
|
|
'formatter': 'dbg',
|
|
'class': 'logging.StreamHandler',
|
|
'stream': 'ext://sys.stdout',
|
|
},
|
|
'file_handler': {
|
|
'level': 'DEBUG',
|
|
'formatter': 'dbg',
|
|
'class': 'logging.handlers.RotatingFileHandler',
|
|
'encoding': 'UTF-8',
|
|
'filename': LOG_DIR.joinpath('tool.log'), # fallback log filename: it will be changed later on
|
|
'mode': 'a',
|
|
'maxBytes': 1048576, # default log size is 1 MiB
|
|
'backupCount': 5 # rotate logs after 5 files
|
|
},
|
|
},
|
|
'formatters': {
|
|
'dbg': {
|
|
'format': '%(asctime)s %(levelname)-8s %(message)s'
|
|
},
|
|
},
|
|
}
|
|
|
|
|
|
def logger_setup(filename=None, use_timestamp=True):
|
|
print(f"LOG_DIR: {LOG_DIR}")
|
|
|
|
if not LOG_DIR.exists():
|
|
print(f'WARNING: log directory \n {LOG_DIR}\ndoes not exist. Creating it!')
|
|
LOG_DIR.mkdir()
|
|
|
|
# validate input, in case of any error warn the user and use fallback values
|
|
if not isinstance(filename, str):
|
|
print('WARNING - logger config: invalid log filename. Using default.')
|
|
filename = 'application.log'
|
|
|
|
# Add timestamp to filename if requested
|
|
if use_timestamp:
|
|
timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
|
|
name_parts = filename.rsplit('.', 1)
|
|
if len(name_parts) == 2:
|
|
filename = f"{name_parts[0]}_{timestamp}.{name_parts[1]}"
|
|
else:
|
|
filename = f"{filename}_{timestamp}"
|
|
|
|
LOGGING_CONFIG['handlers']['file_handler']['filename'] = LOG_DIR.joinpath(filename).resolve()
|
|
|
|
print(f"Log file: {LOGGING_CONFIG['handlers']['file_handler']['filename']}")
|
|
logging.config.dictConfig(LOGGING_CONFIG)
|