Skip to content

Commit

Permalink
feat(logger): allow max_size and file_count params
Browse files Browse the repository at this point in the history
  • Loading branch information
gavindsouza committed Jul 31, 2020
1 parent fd44b9c commit 94116ae
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 11 deletions.
4 changes: 2 additions & 2 deletions frappe/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -1559,10 +1559,10 @@ def _get_doctype_app():

loggers = {}
log_level = None
def logger(module=None, with_more_info=False, allow_site=True, filter=None):
def logger(module=None, with_more_info=False, allow_site=True, filter=None, max_size=100_000, file_count=20):
'''Returns a python logger that uses StreamHandler'''
from frappe.utils.logger import get_logger
return get_logger(module=module, with_more_info=with_more_info, allow_site=allow_site, filter=filter)
return get_logger(module=module, with_more_info=with_more_info, allow_site=allow_site, filter=filter, max_size=max_size, file_count=file_count)

def log_error(message=None, title=_("Error")):
'''Log error to Error Log'''
Expand Down
20 changes: 11 additions & 9 deletions frappe/utils/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,16 @@
default_log_level = logging.DEBUG


def get_logger(module, with_more_info=False, allow_site=True, filter=None):
def get_logger(module, with_more_info=False, allow_site=True, filter=None, max_size=100_000, file_count=20):
"""Application Logger for your given module
Args:
module (str): Name of your logger and consequently your log file.
with_more_info (bool, optional): Will log the form dict using the SiteContextFilter. Defaults to False.
allow_site ((str, bool), optional): Pass site name to explicitly log under it's logs. If True and unspecified, guesses which site the logs would be saved under. Defaults to True.
filter (function, optional): Add a filter function for your logger
filter (function, optional): Add a filter function for your logger. Defaults to None.
max_size (int, optional): Max file size of each log file in kB. Defaults to 100_000.
file_count (int, optional): Max count of log files to be retained via Log Rotation. Defaults to 20.
Returns:
<class 'logging.Logger'>: Returns a Python logger object with Site and Bench level logging capabilities.
Expand All @@ -36,10 +38,10 @@ def get_logger(module, with_more_info=False, allow_site=True, filter=None):
else:
site = False

LOGGER_NAME = "{}-{}".format(module, site or "all")
logger_name = "{0}-{1}".format(module, site or "all")

try:
return frappe.loggers[LOGGER_NAME]
return frappe.loggers[logger_name]
except KeyError:
pass

Expand All @@ -50,18 +52,18 @@ def get_logger(module, with_more_info=False, allow_site=True, filter=None):
logfile = module + ".log"
log_filename = os.path.join("..", "logs", logfile)

logger = logging.getLogger(LOGGER_NAME)
logger = logging.getLogger(logger_name)
logger.setLevel(frappe.log_level or default_log_level)
logger.propagate = False

formatter = logging.Formatter("%(asctime)s %(levelname)s {0} %(message)s".format(module))
handler = RotatingFileHandler(log_filename, maxBytes=100_000, backupCount=20)
handler = RotatingFileHandler(log_filename, maxBytes=max_size, backupCount=file_count)
handler.setFormatter(formatter)
logger.addHandler(handler)

if site:
SITELOG_FILENAME = os.path.join(site, "logs", logfile)
site_handler = RotatingFileHandler(SITELOG_FILENAME, maxBytes=100_000, backupCount=20)
sitelog_filename = os.path.join(site, "logs", logfile)
site_handler = RotatingFileHandler(sitelog_filename, maxBytes=max_size, backupCount=file_count)
site_handler.setFormatter(formatter)
logger.addHandler(site_handler)

Expand All @@ -71,7 +73,7 @@ def get_logger(module, with_more_info=False, allow_site=True, filter=None):
if filter:
logger.addFilter(filter)

frappe.loggers[LOGGER_NAME] = logger
frappe.loggers[logger_name] = logger

return logger

Expand Down

0 comments on commit 94116ae

Please sign in to comment.