Source code for s1ard.ancillary

import os
import sys
import logging
from datetime import datetime
from osgeo import gdal
import spatialist
import pyroSAR
import s1ard
from s1ard.processors.registry import load_processor

log = logging.getLogger('s1ard')


[docs] def set_logging(config, debug=False): """ Set logging for the current process. Parameters ---------- config: dict Dictionary of the parsed config parameters for the current process. debug: bool Set logging level to DEBUG? Returns ------- logging.Logger The log handler for the current process. """ level = logging.DEBUG if debug else logging.INFO logger = logging.getLogger('s1ard') logger.setLevel(level) log_format = "[%(asctime)s] [%(levelname)7s] %(message)s" formatter = logging.Formatter(fmt=log_format, datefmt='%Y-%m-%d %H:%M:%S') logfile = config['processing']['logfile'] if logfile is not None: os.makedirs(os.path.dirname(logfile), exist_ok=True) handler = logging.FileHandler(filename=logfile, mode='a') else: handler = logging.StreamHandler(sys.stdout) logger.addHandler(handler) # Add header first with simple formatting formatter_simple = logging.Formatter("%(message)s") handler.setFormatter(formatter_simple) _log_process_config(logger=logger, config=config) # Use normal formatting from here on handler.setFormatter(formatter) # add pyroSAR logger log_pyro = logging.getLogger('pyroSAR') log_pyro.setLevel(level) log_pyro.addHandler(handler) return logger
def _log_process_config(logger, config): """ Adds a header to the logfile, which includes information about the current processing configuration. Parameters ---------- logger: logging.Logger The logger to which the header is added to. config: dict Dictionary of the parsed config parameters for the current process. """ sw_versions = { 's1ard': s1ard.__version__, 'python': sys.version, 'python-pyroSAR': pyroSAR.__version__, 'python-spatialist': spatialist.__version__, 'python-GDAL': gdal.__version__} processor_name = config['processing']['processor'] processor = load_processor(processor_name) sw_versions.update(processor.version_dict()) max_len_sw = len(max(sw_versions.keys(), key=len)) max_len_main = len(max(config['processing'].keys(), key=len)) max_len_meta = len(max(config['metadata'].keys(), key=len)) max_len_proc = len(max(config[processor_name].keys(), key=len)) max_len = max(max_len_sw, max_len_main, max_len_meta, max_len_proc) + 4 lines = [] lines.append('=' * 100) for section in ['PROCESSING', processor_name.upper(), 'METADATA']: lines.append(f'{section}') for k, v in config[section.lower()].items(): if k == 'dem_prepare_mode': continue if isinstance(v, datetime): val = v.isoformat() else: val = v lines.append(f"{k: <{max_len}}{val}") lines.append('=' * 100) lines.append('SOFTWARE') for k, v in sw_versions.items(): lines.append(f"{k: <{max_len}}{v}") lines.append('=' * 100) header = '\n'.join(lines) logger.info(header)