#!/usr/bin/env python3# -*- coding: utf-8 -*-"""This module contains functions to set up logging for the model run and to logthe start and end of functions."""importloggingimporttimefromtypingimportAnyfrompathlibimportPathfromfunctoolsimportwraps
[docs]defsetup_logging()->None:"""Set up logging configuration for the model run. """# Ensure the log directory exists.Path('log').parent.mkdir(parents=True,exist_ok=True)# Create a log file with a timestamp.log_dir=Path('log')log_time=time.strftime("%Y-%m-%d-%H-%M-%S")log_file=log_dir/f'main_{log_time}.log'logging.basicConfig(filename=log_file,level=logging.INFO,format='%(asctime)s%(levelname)s: %(message)s',datefmt='%Y-%m-%d %H:%M:%S',force=True)# Set up console logging.console=logging.StreamHandler()console.setLevel(logging.INFO)console.setFormatter(logging.Formatter('%(asctime)s%(levelname)s: %(message)s','%Y-%m-%d %H:%M:%S'))logging.getLogger().addHandler(console)
[docs]deflog_parameter_info(config_data:dict)->None:"""Log key parameters used for the model. Parameters ---------- config_data : dict Dictionary containing configuration data for the model. """logging.info("Set parameter solver to value %s",config_data['solver_parameters']['solver'])logging.info("Set parameter input folder to value %s",config_data['general_parameters']['input_folder'])logging.info("Set parameter output_filename to value %s.nc",config_data['general_parameters']['output_filename'])logging.info("Set parameter time_length to value %s",config_data['general_parameters']['hour'])
[docs]deftimer(func:object)->Any:"""Decorator to log the start and end of a function and its runtime. Parameters ---------- func : function The function to be decorated. Returns ---------- Any The return value of decorated function. """@wraps(func)defwrapper(*args,**kwargs):logging.info("Start running %s",repr(func.__name__))start_time=time.time()result=func(*args,**kwargs)run_time=time.time()-start_timelogging.info("Finished %s in %.2f seds",repr(func.__name__),run_time)returnresultreturnwrapper