2018-12-04 21:42:15 -08:00
|
|
|
from logging.handlers import RotatingFileHandler
|
2018-12-17 17:12:37 -08:00
|
|
|
from logging import Filter, DEBUG, INFO, getLogger, Formatter, StreamHandler
|
|
|
|
|
2018-12-04 21:42:15 -08:00
|
|
|
from varken.helpers import mkdir_p
|
|
|
|
|
2018-12-11 21:37:49 -08:00
|
|
|
|
2018-12-17 17:12:37 -08:00
|
|
|
class BlacklistFilter(Filter):
|
2018-12-11 21:37:49 -08:00
|
|
|
"""
|
|
|
|
Log filter for blacklisted tokens and passwords
|
|
|
|
"""
|
2018-12-17 16:00:01 -08:00
|
|
|
filename = "varken.log"
|
|
|
|
max_size = 5000000 # 5 MB
|
|
|
|
max_files = 5
|
|
|
|
log_folder = 'logs'
|
|
|
|
|
2018-12-17 17:12:37 -08:00
|
|
|
blacklisted_strings = ['apikey', 'username', 'password', 'url']
|
2018-12-11 21:37:49 -08:00
|
|
|
|
|
|
|
def __init__(self, filteredstrings):
|
2018-12-17 16:00:01 -08:00
|
|
|
super().__init__()
|
2018-12-11 21:37:49 -08:00
|
|
|
self.filtered_strings = filteredstrings
|
|
|
|
|
|
|
|
def filter(self, record):
|
|
|
|
for item in self.filtered_strings:
|
|
|
|
try:
|
|
|
|
if item in record.msg:
|
2018-12-17 17:12:37 -08:00
|
|
|
record.msg = record.msg.replace(item, 8 * '*' + item[-5:])
|
2018-12-11 21:37:49 -08:00
|
|
|
if any(item in str(arg) for arg in record.args):
|
2018-12-17 17:12:37 -08:00
|
|
|
record.args = tuple(arg.replace(item, 8 * '*' + item[-5:]) if isinstance(arg, str) else arg
|
2018-12-11 21:37:49 -08:00
|
|
|
for arg in record.args)
|
2018-12-17 16:00:01 -08:00
|
|
|
except TypeError:
|
2018-12-11 21:37:49 -08:00
|
|
|
pass
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
2018-12-04 16:12:11 -08:00
|
|
|
class VarkenLogger(object):
|
2018-12-17 10:28:14 -08:00
|
|
|
def __init__(self, debug=None, data_folder=None):
|
2018-12-04 21:42:15 -08:00
|
|
|
self.data_folder = data_folder
|
|
|
|
self.log_level = debug
|
|
|
|
|
|
|
|
# Set log level
|
|
|
|
if self.log_level:
|
2018-12-17 17:12:37 -08:00
|
|
|
self.log_level = DEBUG
|
2018-12-04 21:42:15 -08:00
|
|
|
|
|
|
|
else:
|
2018-12-17 17:12:37 -08:00
|
|
|
self.log_level = INFO
|
2018-12-04 21:42:15 -08:00
|
|
|
|
|
|
|
# Make the log directory if it does not exist
|
2018-12-17 18:19:41 -08:00
|
|
|
mkdir_p(f'{self.data_folder}/{BlacklistFilter.log_folder}')
|
2018-12-04 21:42:15 -08:00
|
|
|
|
2018-12-04 16:12:11 -08:00
|
|
|
# Create the Logger
|
2018-12-17 17:12:37 -08:00
|
|
|
self.logger = getLogger()
|
|
|
|
self.logger.setLevel(DEBUG)
|
2018-12-04 16:12:11 -08:00
|
|
|
|
|
|
|
# Create a Formatter for formatting the log messages
|
2018-12-17 17:12:37 -08:00
|
|
|
logger_formatter = Formatter('%(asctime)s : %(levelname)s : %(module)s : %(message)s', '%Y-%m-%d %H:%M:%S')
|
2018-12-04 16:12:11 -08:00
|
|
|
|
|
|
|
# Create the Handler for logging data to a file
|
2018-12-17 17:12:37 -08:00
|
|
|
file_logger = RotatingFileHandler(f'{self.data_folder}/{BlacklistFilter.log_folder}/{BlacklistFilter.filename}',
|
|
|
|
mode='a', maxBytes=BlacklistFilter.max_size, encoding=None, delay=0,
|
|
|
|
backupCount=BlacklistFilter.max_files)
|
2018-12-04 21:42:15 -08:00
|
|
|
|
|
|
|
file_logger.setLevel(self.log_level)
|
2018-12-04 16:12:11 -08:00
|
|
|
|
|
|
|
# Add the Formatter to the Handler
|
|
|
|
file_logger.setFormatter(logger_formatter)
|
|
|
|
|
|
|
|
# Add the console logger
|
2018-12-17 17:12:37 -08:00
|
|
|
console_logger = StreamHandler()
|
2018-12-04 16:12:11 -08:00
|
|
|
console_logger.setFormatter(logger_formatter)
|
2018-12-04 21:42:15 -08:00
|
|
|
console_logger.setLevel(self.log_level)
|
2018-12-04 16:12:11 -08:00
|
|
|
|
|
|
|
# Add the Handler to the Logger
|
|
|
|
self.logger.addHandler(file_logger)
|
|
|
|
self.logger.addHandler(console_logger)
|