ldap-acl-milter/app/lam_log_backend.py

57 lines
2.0 KiB
Python

import logging
import re
import os
from typing import Optional
from lam_session import LamSession
def init_log_backend():
log_level = logging.INFO
if 'LOG_LEVEL' in os.environ:
if re.match(r'^info$', os.environ['LOG_LEVEL'], re.IGNORECASE):
log_level = logging.INFO
elif re.match(r'^warn|warning$', os.environ['LOG_LEVEL'], re.IGNORECASE):
log_level = logging.WARN
elif re.match(r'^error$', os.environ['LOG_LEVEL'], re.IGNORECASE):
log_level = logging.ERROR
elif re.match(r'debug', os.environ['LOG_LEVEL'], re.IGNORECASE):
log_level = logging.DEBUG
log_format = '%(asctime)s: %(levelname)s %(message)s '
logging.basicConfig(
filename = None, # log to stdout
format = log_format,
level = log_level
)
logging.info("Logger initialized")
def do_log(level: str, log_message: str, session: Optional[LamSession] = None):
log_line = ''
if session is not None:
if hasattr(session, 'mconn_id'):
log_line = "{}".format(session.get_mconn_id())
if session is not None:
if session.get_queue_id() != 'invalid':
log_line = "{0}/{1}".format(log_line, session.get_queue_id())
if session is not None and session.get_proto_stage() != 'invalid':
log_line = "{0}/{1}".format(log_line, session.get_proto_stage())
log_line = "{0}{1}".format(log_line, log_message)
if level == 'error':
logging.error(log_line)
elif level == 'warn' or level == 'warning':
logging.warning(log_line)
elif level == 'info':
logging.info(log_line)
elif level == 'debug':
logging.debug(log_line)
def log_error(log_message: str, session: Optional[LamSession] = None):
do_log('error', log_message, session)
def log_warning(log_message: str, session: Optional[LamSession] = None):
do_log('warn', log_message, session)
def log_info(log_message: str, session: Optional[LamSession] = None):
do_log('info', log_message, session)
def log_debug(log_message: str, session: Optional[LamSession] = None):
do_log('debug', log_message, session)