Logging
This commit is contained in:
105
common/helper/logger.py
Normal file
105
common/helper/logger.py
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
import locale
|
||||||
|
from threading import Thread
|
||||||
|
import queue
|
||||||
|
|
||||||
|
|
||||||
|
class Logger:
|
||||||
|
def __init__(self, log_folder, timezone):
|
||||||
|
self.folder = log_folder
|
||||||
|
self.tz = timezone
|
||||||
|
self.messages = []
|
||||||
|
|
||||||
|
def load_last(self):
|
||||||
|
files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f))]
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
if len(files) == 0:
|
||||||
|
self.messages = []
|
||||||
|
return
|
||||||
|
last = files[-1]
|
||||||
|
self.messages = []
|
||||||
|
with open(os.path.join(self.folder, last), 'r') as f:
|
||||||
|
self.messages.append(f.readline())
|
||||||
|
|
||||||
|
def get_filename(self):
|
||||||
|
files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f)) and 'dairy' in f]
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
if len(files) == 0:
|
||||||
|
return os.path.join(self.folder, 'diary-{0}.log'.format(today.strftime('%Y-%m-%d')))
|
||||||
|
last = files[-1]
|
||||||
|
return os.path.join(self.folder, last)
|
||||||
|
|
||||||
|
def start_new(self):
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
filename = os.path.join(self.folder, 'diary-{0}.log'.format(today.strftime('%Y-%m-%d')))
|
||||||
|
with open(filename, 'w') as f:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def start_log(self):
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
locale.setlocale(locale.LC_TIME, 'es_ES')
|
||||||
|
msg = 'Inicio un nuevo dia siendo las {0} del {1}'.format(today.strftime('%H:%M:%S'),
|
||||||
|
today.strftime('%d de %B de %Y'))
|
||||||
|
self.log(msg)
|
||||||
|
|
||||||
|
def stop_log(self):
|
||||||
|
now = datetime.datetime.now(tz=self.tz)
|
||||||
|
locale.setlocale(locale.LC_TIME, 'es_ES')
|
||||||
|
msg = 'Siendo las {0}, termino mis registros por hoy'.format(now.strftime('%H:%M:%S'))
|
||||||
|
self.log(msg)
|
||||||
|
msg = '--------'
|
||||||
|
self.log(msg)
|
||||||
|
|
||||||
|
def log_action(self, action):
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
locale.setlocale(locale.LC_TIME, 'es_ES')
|
||||||
|
msg = 'A las {0} del {1}, he realizado {2}'.format(today.strftime('%H:%M:%S'),
|
||||||
|
today.strftime('%d de %B de %Y'), action)
|
||||||
|
self.log(msg)
|
||||||
|
|
||||||
|
def log_not_action(self, action):
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
locale.setlocale(locale.LC_TIME, 'es_ES')
|
||||||
|
msg = 'A las {0} del {1}, no he podido realizar {2}'.format(today.strftime('%H:%M:%S'),
|
||||||
|
today.strftime('%d de %B de %Y'), action)
|
||||||
|
self.log(msg)
|
||||||
|
|
||||||
|
def log(self, message):
|
||||||
|
line = message.rstrip('.') + '.'
|
||||||
|
self.messages.append(line)
|
||||||
|
if len(self.messages) > 1000:
|
||||||
|
self.start_new()
|
||||||
|
self.load_last()
|
||||||
|
with open(self.get_filename(), 'a') as f:
|
||||||
|
f.write(line + "\n")
|
||||||
|
|
||||||
|
|
||||||
|
class Worker(Thread):
|
||||||
|
def __init__(self, params, configs):
|
||||||
|
super().__init__()
|
||||||
|
self.event = params['events']['stop']
|
||||||
|
self.queue = params['queues']['log']
|
||||||
|
self.wait = configs.get('supervisor.wait')
|
||||||
|
self.logger = Logger(params['folders']['log'], configs.get('timezone'))
|
||||||
|
self.logging = params['logging']
|
||||||
|
|
||||||
|
def run(self):
|
||||||
|
self.logging.log('Starting', caller=type(self))
|
||||||
|
while not self.event.is_set():
|
||||||
|
self.logging.log('Looping status {0}'.format(not self.event.is_set()), caller=type(self))
|
||||||
|
try:
|
||||||
|
message = self.queue.get(timeout=self.wait)
|
||||||
|
self.logging.log('Logger received message', caller=type(self))
|
||||||
|
if 'is_start' in message and message['is_start']:
|
||||||
|
self.logger.start_log()
|
||||||
|
continue
|
||||||
|
if 'not' in message and message['not']:
|
||||||
|
self.logger.log_not_action(message['action'])
|
||||||
|
continue
|
||||||
|
self.logger.log_action(message['action'])
|
||||||
|
except queue.Empty:
|
||||||
|
pass
|
||||||
|
self.logger.stop_log()
|
||||||
|
self.logging.log('Exiting', caller=type(self))
|
||||||
|
return
|
40
common/helper/logging.py
Normal file
40
common/helper/logging.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
import os
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class Logging:
|
||||||
|
def __init__(self, timezone, folder=None):
|
||||||
|
self.tz = timezone
|
||||||
|
self.folder = folder
|
||||||
|
self.filename = self.get_filename()
|
||||||
|
self.log('------')
|
||||||
|
|
||||||
|
def get_filename(self):
|
||||||
|
files = [f for f in os.listdir(self.folder) if os.path.isfile(os.path.join(self.folder, f)) and 'logging' in f]
|
||||||
|
if len(files) > 0:
|
||||||
|
filename = files[-1]
|
||||||
|
if os.path.getsize(os.path.join(self.folder, filename)) < 1024 * 1024:
|
||||||
|
return filename
|
||||||
|
today = datetime.datetime.now(tz=self.tz)
|
||||||
|
filename = 'logging-{0}.log'.format(today.strftime('%Y-%m-%d'))
|
||||||
|
base_name = filename
|
||||||
|
n = 1
|
||||||
|
while os.path.isfile(os.path.join(self.folder, filename)):
|
||||||
|
filename = '-'.join([
|
||||||
|
base_name,
|
||||||
|
str(n)
|
||||||
|
])
|
||||||
|
n += 1
|
||||||
|
return filename
|
||||||
|
|
||||||
|
def log(self, message, caller=None):
|
||||||
|
now = datetime.datetime.now(tz=self.tz)
|
||||||
|
if caller is None:
|
||||||
|
msg = '[{0}] {1}.'.format(now.strftime('%Y-%m-%d %H:%M:%S'), message.strip('.'))
|
||||||
|
else:
|
||||||
|
msg = '[{0}] ({2}) {1}.'.format(now.strftime('%Y-%m-%d %H:%M:%S'), message.strip('.'), caller)
|
||||||
|
print(msg)
|
||||||
|
if self.folder is not None:
|
||||||
|
filename = os.path.join(self.folder, self.filename)
|
||||||
|
with open(filename, 'a') as f:
|
||||||
|
f.write(msg + "\n")
|
Reference in New Issue
Block a user