Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions datareservoirio/_logging.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import logging
import os
from functools import cache, wraps
import threading
from functools import lru_cache, wraps

from azure.monitor.opentelemetry import configure_azure_monitor

Expand All @@ -9,16 +10,32 @@
from ._constants import ENV_VAR_ENABLE_APP_INSIGHTS, ENV_VAR_ENGINE_ROOM_APP_ID
from .globalsettings import environment

_configure_lock = threading.Lock()
_configured_loggers = {}

@cache

def _ensure_azure_monitor_configured(connection_string, logger_name):
cache_key = (connection_string, logger_name)

if cache_key not in _configured_loggers:
with _configure_lock:
# Double-check locking
if cache_key not in _configured_loggers:
configure_azure_monitor(
connection_string=connection_string, logger_name=logger_name
)
_configured_loggers[cache_key] = True


@lru_cache(maxsize=1)
def get_exceptions_logger() -> logging.Logger:
exceptions_logger = logging.getLogger(__name__ + "_exception_logger")
exceptions_logger.setLevel(logging.DEBUG)

if os.getenv(ENV_VAR_ENABLE_APP_INSIGHTS) is not None:
enable_app_insights = os.environ[ENV_VAR_ENABLE_APP_INSIGHTS].lower()
if enable_app_insights == "true" or enable_app_insights == "1":
configure_azure_monitor(
_ensure_azure_monitor_configured(
connection_string=environment._application_insight_connectionstring,
logger_name=__name__ + "_exceptions_logger",
)
Expand Down
8 changes: 4 additions & 4 deletions datareservoirio/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from collections import defaultdict
from concurrent.futures import ThreadPoolExecutor
from datetime import datetime
from functools import cache, wraps
from functools import lru_cache, wraps
from operator import itemgetter
from urllib.parse import urlencode
from uuid import uuid4
Expand All @@ -25,22 +25,22 @@

from datareservoirio._constants import ENV_VAR_ENABLE_APP_INSIGHTS

from ._logging import log_decorator
from ._logging import _ensure_azure_monitor_configured, log_decorator
from ._utils import function_translation, period_translation
from .globalsettings import environment
from .storage import Storage

log = logging.getLogger(__name__)


@cache
@lru_cache(maxsize=1)
def metric() -> logging.Logger:
logger = logging.getLogger(__name__ + "_metric_appinsight")
if os.getenv(ENV_VAR_ENABLE_APP_INSIGHTS) is not None:
enable_app_insights = os.environ[ENV_VAR_ENABLE_APP_INSIGHTS].lower()
if enable_app_insights == "true" or enable_app_insights == "1":
logger.setLevel(logging.DEBUG)
configure_azure_monitor(
_ensure_azure_monitor_configured(
connection_string=environment._application_insight_connectionstring,
logger_name=__name__ + "_metric_appinsight",
)
Expand Down