Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/cl_plus/daemon/logsetup.py
# coding=utf-8
#
# Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2020 All Rights Reserved
#
# Licensed under CLOUD LINUX LICENSE AGREEMENT
# http://cloudlinux.com/docs/LICENCE.TXT
#

import os
import logging

from logging.handlers import SysLogHandler


_log_file_name = '/var/log/clplus_sender.log'


CONSOLE_LOG = None
SYS_LOG = None
FILE_LOG = None


def setup_logging(caller_name="clplus_sender", console_level=logging.ERROR, file_level=logging.INFO):
    """
    Sets up logging
    :param str caller_name:
    :param console_level:
    :param file_level:
    :return logging.Logger: log, initialized
    """
    logging.root.setLevel(logging.DEBUG)
    init_console_log(console_level)
    init_syslog()
    init_file_log(file_level)
    logger = logging.getLogger(caller_name)
    logger.propagate = False
    return logger


def init_syslog():
    try:
        global SYS_LOG
        if SYS_LOG is None:
            SYS_LOG = SysLogHandler(address='/dev/log', facility=SysLogHandler.LOG_DAEMON)
            logging.root.addHandler(SYS_LOG)
            formatter_sys = logging.Formatter(fmt='lve-stats: (%(name)s) [%(levelname)s] %(message)s')
            SYS_LOG.setFormatter(formatter_sys)  # write in system log only ERROR-s and FATALLERROR-s
            SYS_LOG.setLevel(logging.ERROR)
    except Exception:
        pass


def init_file_log(file_level):
    try:
        global FILE_LOG
        if FILE_LOG is None:
            if not os.path.lexists(_log_file_name):
                umask_saved = os.umask(0o77)
                open(_log_file_name, 'w').close()
                os.umask(umask_saved)
            os.chmod(_log_file_name, 0o600)
            FILE_LOG = logging.FileHandler(_log_file_name)
            logging.root.addHandler(FILE_LOG)
            formatter = logging.Formatter(fmt='%(asctime)s: (%(name)s) [%(levelname)s] %(message)s')
            FILE_LOG.setFormatter(formatter)
        FILE_LOG.setLevel(file_level)
    except Exception:
        pass


def init_console_log(console_level):
    global CONSOLE_LOG
    if CONSOLE_LOG is None:
        CONSOLE_LOG = logging.StreamHandler()
        logging.root.addHandler(CONSOLE_LOG)
        formatter_console = logging.Formatter(fmt='%(levelname)s : (%(name)s) %(message)s')
        CONSOLE_LOG.setFormatter(formatter_console)
    CONSOLE_LOG.setLevel(console_level)