Skip to content

Instantly share code, notes, and snippets.

@molcay
Last active June 25, 2021 08:46
Show Gist options
  • Save molcay/7916588b830b4336d1c6520dad750a97 to your computer and use it in GitHub Desktop.
Save molcay/7916588b830b4336d1c6520dad750a97 to your computer and use it in GitHub Desktop.
Utililty class and method for general-purposed
import logging
import logging.handlers as handlers
from pathlib import Path
DEFAULT_LOG_FORMAT = '%(asctime)s [%(levelname)s] (%(name)s) [%(filename)s:%(lineno)d] [%(threadName)s] - %(message)s'
LOG_BASE_DIR = Path('/var/log/app')
def create_logger(name: str,
log_level: str = logging.INFO,
log_format: str = DEFAULT_LOG_FORMAT,
has_stream_handler: bool = True,
has_timed_rotating_file_handler: bool = True,
**kwargs) -> logging.Logger:
_logger: logging.Logger = logging.getLogger(name)
_logger.setLevel(log_level)
formatter: logging.Formatter = logging.Formatter(log_format)
if has_timed_rotating_file_handler:
handler: logging.Handler = handlers.TimedRotatingFileHandler(
filename=str(LOG_BASE_DIR / f'{name}.log'),
encoding='UTF-8',
when=kwargs.get('when', 'midnight'),
backupCount=kwargs.get('backupCount', 30),
**kwargs
)
handler.setFormatter(formatter)
handler.setLevel(log_level)
_logger.addHandler(handler)
if has_stream_handler:
handler = logging.StreamHandler()
handler.setFormatter(formatter)
handler.setLevel(log_level)
_logger.addHandler(handler)
return _logger
##### Logging #####
class Logger:
def __init__(self, path: str, logger_name: str):
self.path = path
self.logger_name = logger_name
def logger_init(self):
log_path = self.path
logger = logging.getLogger(self.logger_name)
logger.setLevel(logging.INFO)
# log formatting
log_format = '%(asctime)s [%(levelname)s] (%(name)s) - [%(filename)s:%(lineno)d]: ' \
'[%(threadName)s] - %(message)s '
formatter = logging.Formatter(log_format)
# log config
handler = TimedRotatingFileHandler(log_path, when="midnight", interval=1, encoding="utf-8")
handler.setFormatter(formatter)
logger.addHandler(handler)
handler = logging.StreamHandler()
handler.setFormatter(formatter)
logger.addHandler(handler)
return logger
def get_app_logger(is_prod: bool = False):
logger = logging.getLogger('app')
log_file_dir = 'logs'
if is_prod:
log_file_dir = '/var/log/'
if not logger.hasHandlers():
return Logger(os.path.join(dir_path, f'{log_file_dir}/app.log'), 'app').logger_init()
return logger
##### .Logging #####
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment