Hello @Jona
Based on the solution provided this is a continuation of your previous question asking code references.
- How you can modify your
function_app.py to include the logger setup in function_app.py:
import azure.functions as func
import logging
from opencensus.ext.azure.log_exporter import AzureLogHandler
from function import checker_fn, splitter_fn, publisher_fn, consumer_fn, error_handler_fn
from services.env_loader import EnvLoader
# Logger configuration
EXPERIMENT_NAME = 'CSV Compressed'
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
# Ensure the AzureLogHandler is only added once
if not any(isinstance(handler, AzureLogHandler) for handler in logger.handlers):
logger.addHandler(AzureLogHandler())
event_hub_name = EnvLoader.get_value("EVENT_HUB")
schedule_setting = EnvLoader.get_value("SCHEDULE_SETTING")
app = func.FunctionApp()
@app.blob_trigger(arg_name="blob", path="landing/{name}.csv", connection="StorageConnection", source="EventGrid")
def checker(blob: func.InputStream, context: func.Context) -> None:
checker_fn(blob=blob, context=context, logger=logger)
@app.blob_trigger(arg_name="blob", path="stage/{name}.csv", connection="StorageConnection", source="EventGrid")
def splitter(blob: func.InputStream, context: func.Context) -> None:
splitter_fn(blob=blob, context=context, logger=logger)
@app.blob_trigger(arg_name="blob", path="rdz/{name}.csv", connection="StorageConnection", source="EventGrid")
def publisher(blob: func.InputStream, context: func.Context) -> None:
publisher_fn(blob=blob, context=context, logger=logger)
@app.event_hub_message_trigger(arg_name="message", event_hub_name=event_hub_name, connection="EventHubConnection")
def consumer(message: func.EventHubEvent, context: func.Context):
consumer_fn(message=message, context=context, logger=logger)
@app.timer_trigger(arg_name="timer", run_on_startup=False, schedule=schedule_setting)
def error_handler(timer: func.TimerRequest, context: func.Context) -> None:
error_handler_fn(timer=timer, context=context, logger=logger)
About your function.py update your function definitions to accept the logger as a parameter:
import logging
from opencensus.ext.azure.log_exporter import AzureLogHandler
import azure.functions as func
EXPERIMENT_NAME = 'CSV Compressed'
def checker_fn(blob: func.InputStream, context: func.Context, logger: logging.Logger):
blob_content = blob.read()
size_mb = round(len(blob_content) / (1024 * 1024), 2)
custom_dimensions = {
'experiment': EXPERIMENT_NAME,
'blob': blob.name,
'size_mb': size_mb,
}
# Log the message with custom dimensions
logger.info(f'File downloaded | {blob.name} | {size_mb:,} MB', extra={'custom_dimensions': custom_dimensions})
def splitter_fn(blob: func.InputStream, context: func.Context, logger: logging.Logger):
# Your implementation here
pass
def publisher_fn(blob: func.InputStream, context: func.Context, logger: logging.Logger):
# Your implementation here
pass
def consumer_fn(message: func.EventHubEvent, context: func.Context, logger: logging.Logger):
# Your implementation here
pass
def error_handler_fn(timer: func.TimerRequest, context: func.Context, logger: logging.Logger):
# Your implementation here
pass
Regards,
Sina