in generators/backend/templates/src/backend/utils/util.py [0:0]
def set_up_logging():
"""
Configures logging with OpenTelemetry.
Adds filters to exclude specific namespace logs for cleaner output.
"""
exporters = []
exporters.append(AzureMonitorLogExporter(connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING")))
if (local_endpoint):
exporters.append(OTLPLogExporter(endpoint=local_endpoint))
# exporters.append(ConsoleLogExporter())
logger_provider = LoggerProvider(resource=telemetry_resource)
set_logger_provider(logger_provider)
handler = LoggingHandler()
logger = logging.getLogger()
logger.addHandler(handler)
logger.setLevel(logging.INFO)
for log_exporter in exporters:
logger_provider.add_log_record_processor(BatchLogRecordProcessor(log_exporter))
# FILTER - WHAT NOT TO LOG
class KernelFilter(logging.Filter):
"""
A filter to exclude logs from specific semantic_kernel namespaces.
Prevents excessive logging from specified module namespaces to reduce noise.
"""
# These are the namespaces that we want to exclude from logging for the purposes of this demo.
namespaces_to_exclude: list[str] = [
# "semantic_kernel.functions.kernel_plugin",
"semantic_kernel.prompt_template.kernel_prompt_template",
# "semantic_kernel.functions.kernel_function",
"azure.monitor.opentelemetry.exporter.export._base",
"azure.core.pipeline.policies.http_logging_policy"
]
def filter(self, record):
return not any([record.name.startswith(namespace) for namespace in self.namespaces_to_exclude])
# FILTER - WHAT TO LOG - EXPLICITLY
# handler.addFilter(logging.Filter("semantic_kernel"))
handler.addFilter(KernelFilter())