You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Splunk_Deploiement/apps/trackme/lib/trackme_libs_logging.py

76 lines
2.4 KiB

#!/usr/bin/env python
# coding=utf-8
__author__ = "TrackMe Limited"
__copyright__ = "Copyright 2022-2026, TrackMe Limited, U.K."
__credits__ = "TrackMe Limited, U.K."
__license__ = "TrackMe Limited, all rights reserved"
__version__ = "0.1.0"
__maintainer__ = "TrackMe Limited, U.K."
__email__ = "support@trackme-solutions.com"
__status__ = "PRODUCTION"
# Standard library imports
import os
import sys
import time
import logging
from logging.handlers import RotatingFileHandler
# splunk home
splunkhome = os.environ["SPLUNK_HOME"]
# append lib
sys.path.append(os.path.join(splunkhome, "etc", "apps", "trackme", "lib"))
def setup_logger(
name: str, logfile: str, level=logging.INFO, redirect_root: bool = False
) -> logging.Logger:
"""
Set up a dedicated logger.
:param name: Unique name for the logger (e.g. 'myapp.rest.config')
:param logfile: Name of the log file (relative to $SPLUNK_HOME/var/log/splunk)
:param level: Logging level, defaults to logging.INFO
:param redirect_root: If True, attach the same handler to the root logger (not recommended for shared apps)
:return: Configured logger instance
"""
splunkhome = os.environ.get("SPLUNK_HOME", "/opt/splunk")
log_path = os.path.join(splunkhome, "var", "log", "splunk", logfile)
logger = logging.getLogger(name)
logger.setLevel(level)
logger.propagate = False # Prevent bubbling
# Check if this handler is already attached
if not any(
isinstance(h, RotatingFileHandler)
and getattr(h, "baseFilename", None) == log_path
for h in logger.handlers
):
handler = RotatingFileHandler(
log_path, mode="a", maxBytes=10 * 1024 * 1024, backupCount=1
)
formatter = logging.Formatter(
"%(asctime)s %(levelname)s %(name)s %(filename)s %(funcName)s %(lineno)d %(message)s"
)
logging.Formatter.converter = time.gmtime
handler.setFormatter(formatter)
logger.addHandler(handler)
# Optional: redirect root logger
if redirect_root:
root_logger = logging.getLogger()
root_logger.setLevel(level)
root_logger.propagate = False
if not any(
isinstance(h, RotatingFileHandler)
and getattr(h, "baseFilename", None) == log_path
for h in root_logger.handlers
):
root_logger.addHandler(handler)
return logger